系统初始化
# /sbin/modprobe 8021q
# echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter
# echo 2 > /proc/sys/net/ipv4/conf/default/rp_filter
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# sysctl -p
# cat >>/etc/iproute2/rt_tables<<EOF
202 dx
261 sc
EOF
配置办公网
`配置内网虚拟网卡`
# vconfig add eno3 36
`添加一个IP`
# ip address add 10.12.36.254/24 dev eno3.36
`启用虚拟IP`
# ip link set dev eno3.36 up
配置公网
- 电信
`配置虚拟网卡`
# ip link set dev eno4 up
# vconfig add eno4 50
`添加一个IP,这IP是应该公网IP`
# ip addr add 36.110.40.187/27 dev eno4.50
# ip link set dev eno4.50 up
`添加ipset组以该公网命名`
# ipset create wan_36.110.40.187_ip hash:net family inet hashsize 1024 maxelem 65536
`给组打标签`
# iptables -t mangle -I PREROUTING -m set --match-set wan_36.110.40.187_ip src -j MARK --set-xmark 0xbb
`配置SNAT转换`
# iptables -t nat -A POSTROUTING -m mark --mark 0xbb -j SNAT --to-source 36.110.40.187
`添加路由表规则`
# ip rule add from all fwmark 0xbb lookup dx
`添加路由`
"配置默认路由"
# ip route add default via 36.110.40.161 table dx
"配置回包路由"
# ip route add 10.12.36.0/24 via 10.12.36.254 table dx
- 新实创
`配置虚拟网卡`
# ip link set dev eno4 up
# vconfig add eno4 60
`添加一个IP,这IP是应该公网IP`
# ip addr add 222.249.185.24/27 dev eno4.60
# ip link set dev eno4.60 up
`添加ipset组以该公网命名`
# ipset create wan_222.249.185.24_ip hash:net family inet hashsize 1024 maxelem 65536
`给组打标签`
# iptables -t mangle -I PREROUTING -m set --match-set wan_222.249.185.24_ip src -j MARK --set-xmark 0xfa
`配置SNAT转换`
# iptables -t nat -A POSTROUTING -m mark --mark 0xfa -j SNAT --to-source 222.249.185.24
`添加路由表规则`
# ip rule add from all fwmark 0xfa lookup sc
`添加路由`
"配置默认路由"
# ip route add default via 222.249.185.30 table sc
"配置回包路由"
# ip route add 10.12.36.0/24 via 10.12.36.254 table sc
测试出网
`在网关机将需要出网的IP加入到ipset组`
# ipset add wan_222.249.185.24_ip 10.12.35.21
`测试办公机出网`
`在网关机切换出网地址`
# ipset add wan_36.110.40.187_ip 10.12.35.21
# ipset del wan_222.249.185.24_ip 10.12.35.21
`测试办公机出网`
`切换为222出网`
# ipset del wan_222.249.185.24_ip 10.12.35.21
# ipset del wan_36.110.40.187_ip 10.12.35.21
# ipset add wan_222.249.185.24_ip 10.12.35.21
`切换为36出网`
# ipset del wan_222.249.185.24_ip 10.12.35.21
# ipset del wan_36.110.40.187_ip 10.12.35.21
# ipset add wan_36.110.40.187_ip 10.12.35.21
流量走向
当 IP 地址为 10.12.35.21
的流量到达网关时,流量的处理过程如下:
- 进入网关:
- 流量进入网关机,首先经过
mangle
表的PREROUTING
链。 - 匹配源地址为
10.12.35.21
的数据包,因为该地址在wan_36.110.40.187_ip
集合中,数据包被标记为0xbb
。
- 流量进入网关机,首先经过
- 路由决策:
- 根据
ip rule
规则,标记为0xbb
的数据包使用路由表dx
。 - 在路由表dx中查找路由:
- 如果目的地址是
10.12.36.0/24
网段,流量通过网关10.12.36.254
。 - 其他流量通过默认网关
36.110.40.161
。
- 如果目的地址是
- 根据
- NAT 处理:
- 流量在
nat
表的POSTROUTING
链中再次被处理。 - 匹配标记为
0xbb
的数据包,源地址被转换为36.110.40.187
。
- 流量在
总结
- IP 为
10.12.35.21
的流量到达网关机时,会被标记为0xbb
。 - 使用标记为
0xbb
的数据包会根据路由表dx
进行路由决策。 - 如果目的地址是
10.12.36.0/24
网段,流量将通过网关10.12.36.254
。 - 其他流量将通过默认网关
36.110.40.161
。 - 最终,流量的源地址会被转换为
36.110.40.187
。