Linux

在與傳入相同的界面上回复?

  • August 21, 2021

我有一個有兩個介面的系統。兩個介面都連接到網際網路。其中之一被設置為預設路由;這樣做的副作用是,如果數據包進入非預設路由介面,則回復將通過預設路由介面發回。有沒有辦法使用 iptables (或其他東西)來跟踪連接並通過它來自的介面發回回复?

echo 200 isp2 >> /etc/iproute2/rt_tables
ip rule add from <interface_IP> table isp2 prio 1
ip route add default via <gateway_IP> dev <interface> table isp2

以上不需要使用 ipfilter 進行任何數據包標記。它之所以起作用,是因為傳出(回复)數據包將具有最初用於連接到第二個介面的 IP 地址作為傳出數據包的源(發件人)地址。

eth1以下命令通過為具有標記 1 的數據包(到 localhost 的數據包除外)創建備用路由表。該ip命令來自iproute2套件(Ubuntu:iproute Install iproute http://bit.ly/software-smalliproute-doc Install iproute-doc http://bit.ly/software-small)。

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth1

工作的另一半是辨識必須獲得標記 1 的數據包;然後iptables -t mangle -A OUTPUT … -j MARK --set-mark 1在這些數據包上使用以使它們通過路由表 1 進行路由。我認為應該執行以下操作(將 1.2.3.4 替換為非預設路由介面的地址):

iptables -t mangle -A OUTPUT -m conntrack --ctorigdst 1.2.3.4 -j MARK --set-mark 1

我不確定這是否足夠,也許傳入數據包需要另一個規則來告訴 conntrack 模組跟踪它們。

引用自:https://unix.stackexchange.com/questions/4420