基于端口的路由在Ubuntu上

我的情况:一个Ubuntu服务器是2个网关局域网的一部分。 它提供高速度和高延迟。 另一个低延迟的低速。 我的服务器通常使用GW1的所有stream量(由于高带宽)。 我希望能够通过低延迟连接SSH入服务器。 GW2有一个端口转发到服务器,但它显然不能开箱即用,因为服务器将通过GW1回答,这将丢弃包。

经过一番研究后,我就是这么做的(我的SSH端口是222):

我添加了一个iptables规则来标记包

iptables -L PREROUTING -t mangle Chain PREROUTING (policy ACCEPT) target prot opt source destination MARK tcp -- anywhere anywhere tcp dpt:222 MARK set 0x1 

我添加到/ etc / iproute2 / rt_tables以下

 100 sshtable 

我添加了新规则的ip表 – 这是“ip规则显示输出”

 ip rule show 0: from all lookup local 32764: from all fwmark 0x1 lookup sshtable 32766: from all lookup main 32767: from all lookup default 

我改变了新表的路由 – 这是“ip route show table sshtable”

 ip route show table sshtable default via 192.168.2.2 dev eth0 

rp_filter应该被closures:

 cat /etc/sysctl.conf | grep filter net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0 

不幸的是它不工作。 我可以看到传入的连接被阻塞在SYN_SENT(使用tcptrack)。

你有什么提示吗? 聂

你应该标记整个连接,否则只有第一个数据包会。

 iptables -t mangle -A PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN iptables -t mangle -A PREROUTING -p tcp -dport 222 -j MARK --set-mark 0x1 iptables -t mangle -A PREROUTING -j CONNMARK --save-mark 

您可能必须加载ipt_connmark模块。 要确定它是否与内核一起提供,请运行以下命令:

 $ find /lib/modules/`uname -r` -name 'xt_connmark.ko' $ lsmod | grep 'connmark' 

如果尚未加载,请确保加载模块。

 # modprobe ipt_connmark