Linuxマシンの上にphp/bashアプリケーションがあり、1つの物理インターフェースが、たとえば、アウトバウンドWebサーバー123.123.123.123:80に接続しています。私はいくつかのopenvpnプロバイダーを介してこれを行います。私はtunプロバイダーとtapプロバイダーの両方を持っていますが、私のお気に入りのプロバイダーはtunを使用しています。
実際、私は完全に連続的に行うことができます:
Sudo route add 123.123.123.123 tun0
Sudo route del 123.123.123.123
Linuxマシンに到達可能に保ち、同時にopenvpn接続を許可するために、.ovpn構成ファイル内の「route-nopull」オプションを使用します。
ここで、いくつかの独立した要求を開き、常にアウトバウンドWebサーバー123.123.123.123:80に送る必要があります。しかし、私の実際のフローはシリアルであり、2番目の接続を試みる前に、最初の接続が閉じてクリアされるのを待つ必要があります。
私は「偽のポート」でそれをうまく処理できると確信しています。例えば:
だから概念的に言えば:
Iptablesに関するスキルがほとんどないため、コンセプトを表すことができるだけです。結果を達成する別の方法がある場合は、それらを歓迎します。読んでくれてありがとう。
私はそれをここで解決して文書化しました: http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html
これにより、カーネルはパケットを永続的にルーティングし、複数のルートを有効にし、さらにマシン上で証明されていないネットワークに対しても有効になります。
nano /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.ip_forward = 1
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done
これにより、トラフィックのマーキングに必要なiptables、特にmangleとnatが初期化されます。
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
代替ルート編集を追加します。
nano /etc/iproute2/rt_tables
追加(名前は参照です):
1 tunnel0
2 tunnel1
ルートとルールを追加します。名前の代わりにテーブルIDを使用します。お気づきのとおり、特に動的ゲートウェイを持つことができるトンネルの場合、ゲートウェイは無関係です。
ip route add 0.0.0.0/0 dev tun0 table 1
ip route add 0.0.0.0/0 dev tun1 table 2
トラフィックをマークして対応するテーブルにバインドするルールを追加します。
ip rule add from all fwmark 1 table 1
ip rule add from all fwmark 2 table 2
ip route flush cache
あなたが好きかどうかを確認してください:
ip route show table 1
ip route show table 2
ip rule show
何かを見逃した場合は、次の方法で削除できます。
ip rule del table 1
ip route flush table 1
今欠けている部分:これは動作しません:
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
この意志:
iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save
トラフィックを選択し、デバイス/トンネルで同時にプッシュする必要がありますか?問題ありません、私もこれを解決しました:
iptables -A OUTPUT -t mangle -p tcp --dport 10001 -j MARK --set-mark 1
iptables -A OUTPUT -t mangle -p tcp --dport 10002 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp --dport 10001 -j DNAT --to :80
iptables -t nat -A OUTPUT -p tcp --dport 10002 -j DNAT --to :80
返信にはNATが必須
iptables -t nat -A POSTROUTING -o $DEV1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $DEV2 -j MASQUERADE
iptables-save