Ubuntu Server 16.04双网关配置求助:双网卡启用后VPN访问异常
解决Ubuntu Server 16.04双网卡同时启用后VPN无法访问副网卡的问题
我来帮你搞定这个双网卡配置的坑——这种情况几乎都是路由表冲突或者反向路由失效搞的鬼。简单说就是:当双网卡同时开着时,服务器收到VPN客户端发往ens192的请求后,返回的数据包可能选错了网卡走主网卡回去,导致客户端收不到响应。下面是一步步的实操方案:
第一步:先把两块网卡的静态IP配置好
编辑 /etc/network/interfaces 文件(Ubuntu 16.04默认用ifupdown管理网络),替换成以下配置:
# 主网卡 ens160(对应192.168.1.0/24网段) auto ens160 iface ens160 inet static address 192.168.1.100 # 选一个该网段未占用的IP即可 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1 8.8.8.8 # 副网卡 ens192(对应192.168.2.0/24网段) auto ens192 iface ens192 inet static address 192.168.2.100 # 同样选该网段未占用的IP netmask 255.255.255.0 # 划重点!这里绝对不能设置gateway!否则两个默认路由会打架 dns-nameservers 192.168.2.1 8.8.8.8
第二步:配置策略路由,让流量“去回同路”
这是解决问题的核心——我们要给每个网卡单独配路由表,确保从ens192进来的流量,必须从ens192返回。
1. 添加自定义路由表
编辑 /etc/iproute2/rt_tables,在文件末尾加上两行:
100 rt1 # 对应ens160的专属路由表 200 rt2 # 对应ens192的专属路由表
2. 给网卡绑定路由规则
回到 /etc/network/interfaces,在刚才的网卡配置块后面分别添加路由规则:
在ens160的配置下面加:
post-up ip route add 192.168.1.0/24 dev ens160 table rt1 post-up ip route add default via 192.168.1.1 dev ens160 table rt1 post-up ip rule add from 192.168.1.100 table rt1
在ens192的配置下面加:
post-up ip route add 192.168.2.0/24 dev ens192 table rt2 post-up ip route add default via 192.168.2.1 dev ens192 table rt2 post-up ip rule add from 192.168.2.100 table rt2
这些命令的意思是:只要数据包是从ens160的IP(192.168.1.100)发出去的,就用rt1路由表;从ens192的IP发出去的,就用rt2路由表,彻底避免流量串路。
第三步:重启网络服务生效
执行命令重启网络:
sudo /etc/init.d/networking restart
第四步:验证配置是否正确
- 查看两个自定义路由表:
每个表都应该能看到对应网段的路由和默认网关。ip route show table rt1 ip route show table rt2 - 查看路由规则:
应该能看到两条ip rule listfrom 192.168.x.100 table rtX的规则。 - 实际测试:VPN客户端连接后,ping 192.168.2.100,同时在服务器上用
tcpdump -i ens192 icmp抓包,能看到请求和响应包就说明没问题了。
额外检查:防火墙是否拦了流量
如果上面都配置好了还是不行,看看防火墙是不是把ens192的流量给挡了:
- 用iptables的话:
sudo iptables -A INPUT -i ens192 -j ACCEPT sudo iptables -A OUTPUT -o ens192 -j ACCEPT - 用ufw的话:
sudo ufw allow in on ens192 sudo ufw allow out on ens192
内容的提问来源于stack exchange,提问作者Oscar Soriano
相关产品推荐
相关产品推荐

