web-dev-qa-db-ja.com

iproutert_tableとマークがLinuxで機能しない

私はこの構成を持っています。これは公式および非公式のガイドと質問の読み、そして多くの失敗したテストから来ています。 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」静的ルートを強制していることがわかります。何が足りないのですか?ありがとうございました。

1
fab

私はそれをここで解決して文書化しました: 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
2
fab