1. 为什么需要双网卡多网段配置?
想象一下你公司的服务器就像一栋大楼,外网卡是大楼的正门(接待访客),内网卡是员工通道(内部办公区)。如果所有人挤在同一个出入口,既影响效率又存在安全隐患。双网卡配置的本质就是物理隔离网络流量,让内外网各走各的"专用通道"。
我去年给一家电商企业部署服务器时就遇到过典型场景:Web服务需要对外暴露80端口(外网卡),同时数据库服务要隔离在内部网络(内网卡)。更复杂的是,他们财务部和仓储部使用不同的内网网段(192.168.1.0/24和192.168.3.0/24),这时候就需要让服务器能同时访问多个内网段。
2. 环境准备与基础配置
2.1 硬件与网络拓扑确认
先掏出你的"网络工具箱":
- 用
lspci | grep -i ethernet查看网卡硬件信息 ip link show确认系统识别的网卡名称(可能是ens33、enp0s3等新命名)- 准备一张纸画出网络拓扑,标清楚各网段IP范围。比如我的测试环境:
- 外网卡(eth0): 10.144.0.239/24 网关10.144.0.1
- 内网卡(eth1):
- 主IP: 192.168.1.102/24(无网关)
- 需访问的网段: 192.168.3.0/24
注意:Ubuntu 18.04之后改用netplan,但老方法依然有效。本文演示传统interfaces配置方式,更适合初学者理解原理。
2.2 编辑网络配置文件
打开终端,用你最顺手的编辑器修改配置:
sudo vim /etc/network/interfaces基础配置模板如下(根据实际情况修改):
# 外网卡配置(带网关) auto eth0 iface eth0 inet static address 10.144.0.239 netmask 255.255.255.0 gateway 10.144.0.1 dns-nameservers 8.8.8.8 # 内网卡基础配置(无网关) auto eth1 iface eth1 inet static address 192.168.1.102 netmask 255.255.255.0保存后执行sudo systemctl restart networking,如果报错可以尝试更彻底的:
sudo ip addr flush dev eth0 && sudo ip addr flush dev eth1 sudo ifdown -a && sudo ifup -a3. 路由配置的玄机
3.1 解读路由表
执行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)只能有一个,通常应该指向外网网关。内网通信靠的是直连路由(proto kernel),这就是为什么内网卡不需要设网关。
3.2 添加静态路由
要让服务器访问192.168.3.0/24网段,有两种方法:
方法一:添加永久路由(推荐)在/etc/network/interfaces末尾追加:
up route add -net 192.168.3.0 netmask 255.255.255.0 dev eth1方法二:临时添加(测试用)
sudo ip route add 192.168.3.0/24 dev eth1验证路由是否生效:
ping -c 3 192.168.3.123 traceroute 192.168.3.1234. 多网段的高级玩法
4.1 虚拟接口方案
有时候内网需要绑定多个IP,就像给你的内网卡装多个"分机号":
auto eth1:1 iface eth1:1 inet static address 192.168.3.166 netmask 255.255.255.0重启后执行ifconfig会看到eth1:1虚拟接口。这种方法适合:
- 需要服务器在多个网段都有IP的情况
- 某些老旧设备只认同网段通信
4.2 策略路由进阶
当你有更复杂的需求时(比如根据源IP选择不同出口),可以用iproute2的高级功能:
# 创建新路由表 echo "200 custom" >> /etc/iproute2/rt_tables # 添加路由规则 ip rule add from 192.168.1.102 lookup custom ip route add default via 192.168.1.1 dev eth1 table custom5. 排错指南与性能优化
5.1 常见问题排查
症状1:能ping通内网但无法访问外网
- 检查
ip route show确认默认路由指向外网网关 - 测试DNS解析:
nslookup example.com - 查看防火墙规则:
sudo iptables -L -n -v
症状2:跨网段时通时断
- 用
mtr -n 192.168.3.123观察链路质量 - 检查ARP缓存:
ip neigh show - 确认子网掩码配置是否正确
5.2 性能调优参数
在/etc/sysctl.conf中添加:
# 禁用IPv6(如不需要) net.ipv6.conf.all.disable_ipv6 = 1 # 提高网络性能 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216执行sudo sysctl -p生效。对于网关服务器,建议开启IP转发:
net.ipv4.ip_forward = 16. 安全加固建议
网络隔离层面:
- 使用
iptables限制内网卡只允许特定IP访问:sudo iptables -A INPUT -i eth1 -s 192.168.1.100 -j ACCEPT sudo iptables -A INPUT -i eth1 -j DROP - 定期检查ARP表:
arp -an
配置安全:
- 备份网络配置:
cp /etc/network/interfaces ~/interfaces.bak - 使用
chattr +i /etc/network/interfaces防止误修改
我在实际运维中发现,80%的网络问题都源于基础配置错误。建议每次修改后记录变更内容,用date && ip a && ip route保存快照。