centos网关连接VPN后,局域网内一台机器需要走vpn。通过设置策略路由表达到需求
添加一条路由表
Linux 中支持 256 张路由表,编号为 0 到 255,可直接使用编号操作,也可使用编号的别名操作,编号和其别名的对应关系在 /etc/iproute2/rt_tables 文件中。
默认有 local,main,default 三个路由表,这三个路由表的名称命名就来自 /etc/iproute2/rt_tables
cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep建立两条路由表
echo "101 hulue" >> /etc/iproute2/rt_tables echo "102 vpn" >> /etc/iproute2/rt_tables建立路由
ip route add default dev ppp0 table vpn ip route add default via 192.168.1.1 dev eth0 table hulue建立规则
ip rule add from 192.168.18.x table vpn //源192.168.18.x这个ip走vpn表 ip rule add to x.x.x.x table hulue pref 100 //目的地址x.x.x.x的走hulue表 pref 100优先级100在前面 ip ro flush cache查看
ip rule 0: from all lookup local 100: from all to x.x.x.x lookup hulue 32765: from 192.168.18.x lookup vpn 32766: from all lookup main 32767: from all lookup default如果要指定规则优先级,可以加上 pref 参数。pref 即路由表内序号,如果不加 pref,则将在已有的规则最小序号前插入。
这里注意优先级的顺序 优先级(pref)从低到高匹配 从0到32767顺序匹配 可手动加参数。默认是在已有的规则最小序号前插入
添加两条指定序号的规则
ip rule add from 192.168.18.x table vpn pref 3 ip rule add to x.x.x.x table hulue pref 2我们需求是排除某个目的IP不走VPN 其余都走vpn 所以是排除规则在前,vpn规则在后 优先级已序号从低到高匹配
ip rule 0: from all lookup local 2: from all to x.x.x.x lookup hulue 3: from 192.168.18.x lookup vpn 32766: from all lookup main 32767: from all lookup default删除规则
ip rule del prio 2 ip rule del prio 3 //指定序号即可还需配置防火墙nat
-A POSTROUTING -s 192.168.18.x/32 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.18.0/24 -o eth0 -j MASQUERADE路由设置好还是不行,再单独设置了192.168.18.x 通过ppp0 进行SNAT,路由和iptables都得设置才能生效
网关可以设置所有的SNAT,还可以设置单网段,单网卡。
此问题原因是单独设置了18段ip的SNAT。把SNAT设置为默认 所有子网 特别注意不要指定网卡出口。不然限制死了。
iptables -t nat -I POSTROUTING -j MASQUERADE -A POSTROUTING -j MASQUERADE 这样就不用另外设置iptables