web-dev-qa-db-ja.com

iptablesを使用して、特定のインターフェイスを介して特定の宛先IPでパケットをルーティングする方法

このチュートリアルを使用して、ルータとしてLinuxボックスを設定しています: https://help.ubuntu.com/community/Router

そのマシンには2つのネットワークインターフェイスと1つのVPNがあります。eth0はメインのインターネットインターフェイス、eno1はイントラネット、tun0はVPNインターフェイスです。

チュートリアルのとおり、以下のスクリプトを使用して、eno1からのすべてをvpn経由でルーティングしています。

iptables-restore <<-EOF
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i tun0 -o eno1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
-A FORWARD -j LOG
COMMIT
EOF

それはうまくいきます。しかし、今度はeno1から送信され、宛先IPが203.205.147.173であるすべてのパケットをeth0経由でルーティングします。

どのようなiptablesルールをスクリプトに追加する必要がありますか?

編集

すべてのパケットを203.205.147.173にマークするために、スクリプトを次のように変更します。

iptables-restore <<-EOF
*nat
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i tun0 -o eno1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eno1 -o tun0 -j ACCEPT
-A FORWARD -j LOG
COMMIT

*mangle
-A PREROUTING -i "$INTIF" -d 203.205.0.0/16 -j MARK --set-mark 0x15
COMMIT
EOF

次に、テーブルXを作成します。

Sudo nano /etc/iproute2/rt_tables、 それから加えて 1 tableXファイルの最後に。

次に、ルールとルートを追加します。

Sudo ip rule add fwmark 0x15 lookup tableX
Sudo ip route add default via 192.168.5.1 dev eth0 table tableX
Sudo ip route add 203.205.0.0/16 via 192.168.5.1 dev eth0 table tableX

だが traceroute 203.205.147.173 タイムアウト:

traceroute to 203.205.147.173 (203.205.147.173), 64 Hops max, 52 byte packets
 (192.168.8.1)  2.384 ms  1.060 ms  1.027 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *

TableXに正しいルートを追加していないと思います。 tableXを初期化する方法に関する提案はありますか?

eth0ルーターのIPは192.168.5.1で、eno1ルーターのIPは192.168.8.1であることに注意してください

2
Lionel

Iptables自体は何もルーティングしませんが、ファイアウォールマークによるルーティングの決定に影響を与える可能性があります。 ipツールを使用して別のルーティングテーブル(ip route add <route> ... table Xなど)を追加し、ファイアウォールマーク(ip rule add fwmark 0x1 lookup X)でパケットをルーティングするルールを追加し、iptablesルール(iptables -t mangle -A PREROUTING ... -j MARK --set-mark 0x1)でパケットをマークします。これらの手順の後、マークされたパケットはルーティングされますルーティングテーブルXを介して。LARTC(Linuxの高度なルーティングとトラフィック制御)から取得できる詳細情報。

1
Anton Danilov

次のような行を追加する必要があります。

-A FORWARD -i eno1 -o eth0 -d 203.205.147.173 -j ACCEPT

LOGルールの前に追加する必要がある場合があります。

0
Khaled