私は初めてiptablesを使いましたが、今日raspianで簡単な会話を構成しました。
# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT
# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
ご覧のとおり、私はopenvpnを使用してトラフィックをトンネルインターフェイスにリダイレクトしています。たとえば、ポート範囲 900 ~ 999 とソース 192.168.1.5 を除き、インターフェイス eth1 に直接送信し、VPN 暗号化を防止する例外を作成したいと思います。
どのようにそのようなルールを作成できますか?
ご意見ありがとうございました。
編集:私は次のことを試しました
iptables -t nat -A POSTROUTING -p tcp --dport 900:999 --out-interface eth1 -j MASQUERADE
しかし、望む効果はないようです...
答え1
特定のトラフィック フローごとにルーティング テーブルを設定するには、ポリシー ルーティングが必要です。きれいで良い例を見つけました。Linux Advanced Routing Mini ガイド。
次の行を入力してください/etc/iproute2/rt_tables
。
1 DIRECT
これにより、次のことができます。
iptables -t mangle -A PREROUTING -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via <gateway address> dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
ip rule add from 192.168.1.5/32 table DIRECT
答え2
あなたの助けを借りて私はこの問題を解決することができました。 eth1からの入出力ルールを追加してルールを追加する代わりに、PREROUTING条件をIP 192.168.1.5にのみ一致するように変更する必要があります。 192.168.1.5/32テーブルDIRECTのIPルール追加を使用するルーティング方法は、192.168.1.5のすべてのトラフィックがポート900〜999のみを通過するのではなくeth1を通過するようにします。最終的な構成は次のとおりです。
# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i tun0 -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW -i eth1 -j ACCEPT
/sbin/iptables -A FORWARD -i tun0 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i eth2 -o tun0 -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Don't forward from the outside to the inside.
/sbin/iptables -A FORWARD -i tun0 -o tun0 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Port exceptions
# Added -s for source address 192.168.1.5 here
iptables -t mangle -A PREROUTING -s 192.168.1.5 -p tcp --dport 900:999 -j MARK --set-mark 1
ip route add default via 192.168.2.1 dev eth1 table DIRECT
ip rule add from all fwmark 1 table DIRECT
助けてくれてありがとう。