ip route add default via 电信网关 dev eth1 src 电信IP table ctc
ip route add 192.168.0.0/24 dev eth0 scope link src 192.168.0.1 table ctc
ip rule add from 电信IP table ctc
ip route flush table cnc
ip route add default via 网通网关 dev eth2 src 网通IP table cnc
ip route add 192.168.0.0/24 dev eth0 scope link src 192.168.0.1 table ctc
ip rule add from 网通IP table cnc
3. iptables打标记+iproute2 fwmark
1)使用 CONNMARK 对连接进行标记
外网进来数据
iptables -t mangle -A PREROUTING -i eth1 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x100
iptables -t mangle -A PREROUTING -i eth2 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x200
转发出去的数据
iptables -t mangle -A POSTROUTING -o eth1 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x100
iptables -t mangle -A POSTROUTING -o eth2 -m conntrack --ctstate NEW -j CONNMARK --set-mark 0x200
局域网进来数据
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
本地出去数据
iptables -t mangle -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
2)在 IPROUTE2 中做基于 fwmark 的策略路由
ip rule add fwmark 0x100 table ctc prio 40
ip rule add fwmark 0x200 table cnc prio 40
3)添加原路返回路由
ip route add table ctc to $CTC_NET dev eth1 scope link
ip route add table ctc to $CNC_NET dev eth2 scope link
ip route add table ctc to 192.168.0.0/24 dev eth0 scope link
ip route add default via 电信网关 dev eth1 table ctc
ip route add table cnc to $CTC_NET dev eth1 scope link
ip route add table cnc to $CNC_NET dev eth2 scope link
ip route add table cnc to 192.168.0.0/24 dev eth0 scope link
ip route add default via 网通网关 dev eth2 table cnc
Iptables/NAT 规则
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 局域网网段 -j SNAT --to-source 电信外网IP
/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 局域网网段 -j SNAT --to-source 网通外网IP
如果外网IP是动态的,可以用 MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 局域网网段 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 局域网网段 -j MASQUERADE
端口映射
端口映射可以分别针对两条线做端口映射