次のガイドを使用して、Raspberry Piをアクセスポイントとして設定しました。
すべてのトラフィックを転送しwlan0
てNATしています。eth0
良い結果!
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
tun0-00
これで、インターフェイスの使用と転送を除いて同じルールを設定したいと思います。みんな私のトラフィックはVPNトンネルを通過します。私はすべてを送信したいと思うし、何もホストネットワークに漏れたくありません。次のように考えてみてください。
sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0-00 -j ACCEPT
残念ながら、これらのiptablesルールは不完全であることを知っています。問題は、eth0
トラフィック転送の元のルールがまだ存在することですeth0
。
トンネルが開いている場合は、すべてのトラフィックをトンネル経由で送信したいと思います。それ以外の場合eth0
。
修正する:
私のルールを挿入するには、-Iフラグを使用します。
sudo iptables -t nat -I POSTROUTING 1 -o tun0-00 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0-00 -j ACCEPT
フォワードチェーン:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- wlan0 tun0-00 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- tun0-00 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 0 0 ACCEPT all -- eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 0 0 ACCEPT all -- wlan0 eth0 0.0.0.0/0 0.0.0.0/0
5 0 0 ACCEPT all -- wlan1 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 0 0 ACCEPT all -- wlan0 wlan1 0.0.0.0/0 0.0.0.0/0
それでも残念ですが、配信が機能していないようです。
クライアントVPNの設定
敏感に見えるコンテンツを削除しました。
dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote XXX.XXX.XXX.XXX PORT_NUM udp
lport XXX
verify-x509-name "VPN_Certificate" name
pkcs12 CERT_NAME.p12
tls-auth CERTIFICATE-tls.key 1
ns-cert-type server
redirect-gateway local def1
パイはよく接続され、さまざまなパブリックIPを反映しています。クライアントはまだ pi をゲートウェイとしてマークしますが、接続できなくなりました。
解決策
redirect-gateway def1
まず、piの.ovpnファイルに追加する必要があります。
次に、インターフェイス名を正しく入力する必要があります。狂った人になった気分だったtun0-00
のにどうやら序盤に見て、その時が唯一存在していたようだ。インターフェイスは本当にtun0
。
したがって、適切なiptablesコマンドは次のようになります。
sudo iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0 -j ACCEPT
今はうまくいきます!
答え1
2つのルールセットが必要ですiptables
。これらの 2 つのルールセットは、指定されたインターフェイスから発信されるトラフィックが適切に偽装されることを保証します。私の提案は次のとおりです。あなたの提案より少し簡単です。
# Masquerade outgoing traffic
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Allow return traffic
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward everything
iptables -A FORWARD -j ACCEPT
パズルから欠落している部分はパスです。トンネルが稼働している場合、「すべての」発信トラフィックはそれを使用したいと思います。それ以外の場合は、通常のパスを使用してください。
これが処理されるOpenVPN内でredirect-gateway def1
クライアント構成のパラメータを使用します。
答え2
便利なツールは、行番号とともに既存のルールをリストすることです。
iptables --line-numbers -t filter -L FORWARD
次のオプションを使用してルールを削除できます-D
。
iptables -t filter -D FORWARD 1
オプションを使用して、指定した場所に新しいルールを挿入できます-I
。
iptables -t filter -I FORWARD 0 blah-blah-blah
これにより、テーブルの先頭に新しいルールが挿入されるため、最初のステップで参照されます。
編集する:
FORWARD
通常、一致するにはテーブル内のルールが1つだけ必要です-m state --state RELATED,ESTABLISHED
。
-I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
接続トレースを使用すると、既知のすべての接続をルーティングできるためです。
はい、設定する必要がありますポリシールーティング インターフェイスを介してアクセスする可能性が最も高いがインターフェイスを介してアクセスできないwlan
デフォルトゲートウェイにトラフィックを転送します。ethernet
vpn