Ubuntu双网卡网络故障排查从路由表到策略路由的深度解析当你为Ubuntu服务器配置了双网卡后本以为能轻松实现内外网隔离访问却突然发现内网服务无法访问外网或者外网用户无法访问你的服务——这种场景下大多数工程师的第一反应是检查IP和网关配置但真正的问题往往藏在更深层的网络栈中。本文将带你用网络工程师的视角逐层解剖双网卡环境下的典型连通性问题。1. 故障现象与初步诊断典型的双网卡网络故障通常表现为以下几种形式服务器可以ping通内网设备但无法ping通外网域名如baidu.com外网客户端可以访问服务器的外网IP但无法访问特定服务端口内网客户端访问服务器时响应时断时续从服务器发出的外网请求总是从错误的网卡出去第一步永远是确认基础配置。使用以下命令快速检查网络接口状态ip addr show | grep -A 3 eth预期应该看到两个网卡都分配了正确的IP地址且处于UP状态。如果发现某个接口没有IP或处于DOWN状态需要先解决这个基础问题sudo ip link set eth1 up # 启用接口 sudo dhclient eth1 # 如果使用DHCP注意现代Ubuntu版本默认使用netplan而非传统的/etc/network/interfaces确认你的配置方式与系统匹配2. 路由表网络流量的导航图当基础配置正常但连通性问题依旧时路由表就是下一个需要检查的重点。执行ip route show在双网卡环境中典型的问题路由表可能长这样default via 10.144.0.1 dev eth0 proto static 10.144.0.0/24 dev eth0 proto kernel scope link src 10.144.0.239 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.102这里隐藏着三个常见陷阱默认网关冲突如果两个网卡都配置了默认网关会导致路由表出现多个default项路由优先级混乱更具体的路由如192.168.1.0/24会优先于默认路由缺少回程路由内网访问外网时响应包可能从错误路径返回使用traceroute验证实际流量路径traceroute -n 8.8.8.8 # 测试外网路径 traceroute -n 192.168.3.123 # 测试内网路径3. 策略路由精细控制流量走向当简单的静态路由无法满足需求时Linux的策略路由Policy Routing就派上用场了。这套系统允许你基于源IP、目的IP、端口等多种条件决定路由选择。创建自定义路由表的步骤# 1. 在/etc/iproute2/rt_tables中添加新表 echo 100 internal | sudo tee -a /etc/iproute2/rt_tables # 2. 为内网流量添加特殊路由规则 sudo ip route add 192.168.1.0/24 dev eth1 src 192.168.1.102 table internal sudo ip route add default via 192.168.1.1 dev eth1 table internal # 3. 创建路由规则 sudo ip rule add from 192.168.1.102 lookup internal验证策略路由效果ip rule show ip route show table internal4. 防火墙与NAT看不见的守门人即使路由配置完美防火墙规则也可能阻断你的流量。Ubuntu常用的防火墙工具有UFW用户友好的前端iptables/nftables底层的netfilter框架检查当前防火墙规则sudo ufw status verbose # 如果使用UFW sudo iptables -L -v -n # 查看filter表规则 sudo iptables -t nat -L -v -n # 查看NAT规则典型问题包括缺少MASQUERADE内网卡访问外网时需要地址转换sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEINPUT链限制过严阻止了外网访问sudo ufw allow in on eth0 proto tcp to any port 80FORWARD链未启用在多网卡转发场景下需要特别配置5. DNS解析被忽视的关键环节网络连通性问题有时其实是DNS解析失败导致的。使用以下工具进行诊断nslookup example.com # 基础查询 dig trace example.com # 详细解析过程 systemd-resolve --status # 查看系统DNS配置双网卡环境下的DNS特殊考虑确保/etc/resolv.conf中配置了可用的DNS服务器如果使用VPN或其他网络管理器可能覆盖了DNS设置考虑为不同网卡使用不同的DNS服务器# 使用netplan配置多网卡DNS network: version: 2 ethernets: eth0: nameservers: addresses: [8.8.8.8, 8.8.4.4] eth1: nameservers: addresses: [192.168.1.1]6. 高级调试技巧当常规方法无法定位问题时这些高级工具可能会帮到你tcpdump抓包分析sudo tcpdump -i eth0 -nn host 8.8.8.8 # 捕获特定流量 sudo tcpdump -i any tcp port 80 # 监控HTTP流量连接状态跟踪ss -tulnp # 查看活跃连接 conntrack -L # 查看NAT连接跟踪MTU问题诊断ping -M do -s 1472 8.8.8.8 # 测试MTU大小 ip link show | grep mtu # 查看接口MTU设置7. 持久化配置临时修改在重启后会丢失确保将关键配置持久化对于netplan用户# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: eth0: addresses: [10.144.0.239/24] gateway4: 10.144.0.1 nameservers: addresses: [8.8.8.8] eth1: addresses: - 192.168.1.102/24 - 192.168.3.166/24 routes: - to: 192.168.3.0/24 via: 192.168.1.1持久化iptables规则sudo apt install iptables-persistent sudo netfilter-persistent save策略路由的持久化需要创建systemd服务单元或使用if-up脚本。
解决Ubuntu双网卡下,内网服务无法访问外网或被外网访问的疑难杂症
发布时间:2026/6/15 12:17:46
Ubuntu双网卡网络故障排查从路由表到策略路由的深度解析当你为Ubuntu服务器配置了双网卡后本以为能轻松实现内外网隔离访问却突然发现内网服务无法访问外网或者外网用户无法访问你的服务——这种场景下大多数工程师的第一反应是检查IP和网关配置但真正的问题往往藏在更深层的网络栈中。本文将带你用网络工程师的视角逐层解剖双网卡环境下的典型连通性问题。1. 故障现象与初步诊断典型的双网卡网络故障通常表现为以下几种形式服务器可以ping通内网设备但无法ping通外网域名如baidu.com外网客户端可以访问服务器的外网IP但无法访问特定服务端口内网客户端访问服务器时响应时断时续从服务器发出的外网请求总是从错误的网卡出去第一步永远是确认基础配置。使用以下命令快速检查网络接口状态ip addr show | grep -A 3 eth预期应该看到两个网卡都分配了正确的IP地址且处于UP状态。如果发现某个接口没有IP或处于DOWN状态需要先解决这个基础问题sudo ip link set eth1 up # 启用接口 sudo dhclient eth1 # 如果使用DHCP注意现代Ubuntu版本默认使用netplan而非传统的/etc/network/interfaces确认你的配置方式与系统匹配2. 路由表网络流量的导航图当基础配置正常但连通性问题依旧时路由表就是下一个需要检查的重点。执行ip route show在双网卡环境中典型的问题路由表可能长这样default via 10.144.0.1 dev eth0 proto static 10.144.0.0/24 dev eth0 proto kernel scope link src 10.144.0.239 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.102这里隐藏着三个常见陷阱默认网关冲突如果两个网卡都配置了默认网关会导致路由表出现多个default项路由优先级混乱更具体的路由如192.168.1.0/24会优先于默认路由缺少回程路由内网访问外网时响应包可能从错误路径返回使用traceroute验证实际流量路径traceroute -n 8.8.8.8 # 测试外网路径 traceroute -n 192.168.3.123 # 测试内网路径3. 策略路由精细控制流量走向当简单的静态路由无法满足需求时Linux的策略路由Policy Routing就派上用场了。这套系统允许你基于源IP、目的IP、端口等多种条件决定路由选择。创建自定义路由表的步骤# 1. 在/etc/iproute2/rt_tables中添加新表 echo 100 internal | sudo tee -a /etc/iproute2/rt_tables # 2. 为内网流量添加特殊路由规则 sudo ip route add 192.168.1.0/24 dev eth1 src 192.168.1.102 table internal sudo ip route add default via 192.168.1.1 dev eth1 table internal # 3. 创建路由规则 sudo ip rule add from 192.168.1.102 lookup internal验证策略路由效果ip rule show ip route show table internal4. 防火墙与NAT看不见的守门人即使路由配置完美防火墙规则也可能阻断你的流量。Ubuntu常用的防火墙工具有UFW用户友好的前端iptables/nftables底层的netfilter框架检查当前防火墙规则sudo ufw status verbose # 如果使用UFW sudo iptables -L -v -n # 查看filter表规则 sudo iptables -t nat -L -v -n # 查看NAT规则典型问题包括缺少MASQUERADE内网卡访问外网时需要地址转换sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEINPUT链限制过严阻止了外网访问sudo ufw allow in on eth0 proto tcp to any port 80FORWARD链未启用在多网卡转发场景下需要特别配置5. DNS解析被忽视的关键环节网络连通性问题有时其实是DNS解析失败导致的。使用以下工具进行诊断nslookup example.com # 基础查询 dig trace example.com # 详细解析过程 systemd-resolve --status # 查看系统DNS配置双网卡环境下的DNS特殊考虑确保/etc/resolv.conf中配置了可用的DNS服务器如果使用VPN或其他网络管理器可能覆盖了DNS设置考虑为不同网卡使用不同的DNS服务器# 使用netplan配置多网卡DNS network: version: 2 ethernets: eth0: nameservers: addresses: [8.8.8.8, 8.8.4.4] eth1: nameservers: addresses: [192.168.1.1]6. 高级调试技巧当常规方法无法定位问题时这些高级工具可能会帮到你tcpdump抓包分析sudo tcpdump -i eth0 -nn host 8.8.8.8 # 捕获特定流量 sudo tcpdump -i any tcp port 80 # 监控HTTP流量连接状态跟踪ss -tulnp # 查看活跃连接 conntrack -L # 查看NAT连接跟踪MTU问题诊断ping -M do -s 1472 8.8.8.8 # 测试MTU大小 ip link show | grep mtu # 查看接口MTU设置7. 持久化配置临时修改在重启后会丢失确保将关键配置持久化对于netplan用户# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: eth0: addresses: [10.144.0.239/24] gateway4: 10.144.0.1 nameservers: addresses: [8.8.8.8] eth1: addresses: - 192.168.1.102/24 - 192.168.3.166/24 routes: - to: 192.168.3.0/24 via: 192.168.1.1持久化iptables规则sudo apt install iptables-persistent sudo netfilter-persistent save策略路由的持久化需要创建systemd服务单元或使用if-up脚本。