私はこの構成を持っています。これは公式および非公式のガイドと質問の読み、そして多くの失敗したテストから来ています。 CentOS 7およびUbuntuサーバー15(LAMPおよびeth0のみ)。
/ etc/iproute2/rt_tables
1 tunnel0
ルートとマークを準備します
ip route add 0.0.0.0/0 dev tun0 table 1
ip rule add from all fwmark 1 table 1
ip route flush cache
(また、テーブルIDを使用して、「10.123.123.x」を介してtun0アドレスとtun0ゲートウェイを宣言しようとしました...)
IPTABLES
iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save
Tun0の代わりにeth0ISPパブリックIPが表示されます。これは、「routeadd」静的ルートを強制していることがわかります。何が足りないのですか?ありがとうございました。
私はそれをここで解決して文書化しました: 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