iptables を使用してインターフェイスから VPN TUN インターフェイスにトラフィックをリダイレクトする

iptables を使用してインターフェイスから VPN TUN インターフェイスにトラフィックをリダイレクトする

何か簡単なことを達成しようとしているのですが、どうやら何かが欠けているようです。

私のボックスでは、インターフェイスを作成する VPN クライアントが稼働していますtun0。ボックスには、からの外部トラフィックが送信されますeth0

eth0からへのトラフィックを転送したいと思いますtun0。次のコマンドを実行します。

iptables -A FORWARD -i eth0 -o tun0 -s 192.168.100.0/28 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -o tun0 -j MASQUERADE

特定の範囲のみを転送したいので、ソース IP の範囲を選択することに注意してください。

tcpdumpインターフェイス上で実行するとeth0、範囲内のマシンから入ってくるトラフィックは確認できます192.168.100.0/28が、入ってくるトラフィックは確認できませんtun0

IP 転送は当然オンになっています。

ここで本当に何が欠けているのかはわかりません。

IP設定eth0192.168.10.93/24tun010.8.8.15/24

➜  ~ ip r
default via 192.168.10.1 dev eth0  metric 100
10.8.8.0/24 dev tun0 scope link  src 10.8.8.15
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1
172.30.32.0/23 dev hassio scope link  src 172.30.32.1
192.168.10.0/24 dev eth0 scope link  src 192.168.10.93  metric 100

答え1

これは結局のところ、トラフィックが192.168.100.0/28外部に流出することに関するものかもしれないのでtun0 、次のような方法で解決できます。

ip rule add from 192.168.100.0/28 lookup 10000
ip route add default via ${tun0gwip} table 10000

また、tun0 gw が他のネットワークにルーティングできない限り、必要な iptables MASQUERADE も保持します。

答え2

問題を解決したコマンドの正確な組み合わせは次のとおりです。

vpn下に新しいルートテーブルを作成します

➜  ~ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep
1 vpn

そして以下を実行します:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables -A FORWARD -i eth0 -o tun0 -s 192.168.100.0/28 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

ip route add default dev tun0 table vpn
ip route add 192.168.100.0/28 dev eth0 table vpn

ip rule add from 192.168.100.0/28 table vpn

関連情報