我的情况:一个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