次のガイドを使用して、Raspberry Piをアクセスポイントとして設定しました。
wlan0
をeth0
に転送し、すべてのトラフィックをNAT処理しています。よく働く!
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トンネル経由で転送allすることを除いて、同じルールを設定したいと思います。私はそれをすべて送信したいのですが、ホストネットワークに漏洩するものはありません。 Thinkinは次のようになります。
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
FORWARDチェーン:
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
Piは正常に接続され、別のパブリック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
今はうまくいきます!
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
不足しているパズルの部分はルーティングです。トンネルが稼働している場合は、「すべての」発信トラフィックがそれを使用するようにします。それ以外の場合は、通常のルートを使用します。
これは、クライアント構成のredirect-gateway def1
パラメータを使用して OpenVPN内 で処理されます。
便利なツールは、既存のルールを行番号でリストすることです。
iptables --line-numbers -t filter -L FORWARD
-D
オプションでルールを削除できます:
iptables -t filter -D FORWARD 1
-I
オプションを使用して、指定した場所に新しいルールを挿入できます。
iptables -t filter -I FORWARD 0 blah-blah-blah
これにより、テーブルの先頭に新しいルールが挿入されるため、最初のターンで参照されます。
編集:
通常、-m state --state RELATED,ESTABLISHED
に一致するFORWARD
テーブルのルールは1つだけ必要です。
-I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
接続追跡により、既知のすべての接続をルーティングできるようになります。
そして、はい、wlan
インターフェースを介して到達できる可能性が最も高いデフォルトゲートウェイにethernet
トラフィックを転送しないように policy routing を設定する必要がありますが、vpn
インターフェース。