Linux
在與傳入相同的界面上回复?
我有一個有兩個介面的系統。兩個介面都連接到網際網路。其中之一被設置為預設路由;這樣做的副作用是,如果數據包進入非預設路由介面,則回復將通過預設路由介面發回。有沒有辦法使用 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-small,iproute-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 模組跟踪它們。