保姆级教程:在Ubuntu 22.04上为服务器配置双网卡(内网+外网)并设置静态IP
Ubuntu 22.04服务器双网卡配置实战:从静态IP到多网段路由管理
在现代化数据中心和云计算环境中,服务器通常需要同时接入多个网络环境以满足不同的业务需求。一台运行Ubuntu 22.04 LTS的服务器可能需要同时连接互联网(外网)和内部管理网络(内网),这就需要我们为不同的网卡配置独立的网络参数并确保路由正确。本文将深入探讨如何在Ubuntu 22.04上高效配置双网卡环境,涵盖从基础配置到高级路由管理的全流程。
1. 环境准备与网络规划
在开始配置之前,我们需要对服务器硬件和网络环境进行全面评估。首先确认服务器已安装两块物理网卡,并通过
lspci | grep -i ethernet
命令验证网卡硬件是否被系统正确识别。现代服务器通常使用万兆或更高速率的网卡,确保物理连接状态正常是后续配置的基础。
网络规划阶段需要明确以下关键参数:
-
外网(WAN)配置 :
- IP地址:通常由网络管理员分配(如203.0.113.100)
- 子网掩码:255.255.255.0
- 网关:203.0.113.1
- DNS服务器:8.8.8.8, 8.8.4.4
-
内网(LAN)配置 :
- IP地址:私有地址段(如192.168.1.100)
- 子网掩码:255.255.255.0
- 网关:通常不设置或设为内网网关
- DNS:可设为内网DNS或与外网相同
使用
ip link show
命令查看当前网卡设备名称,在Ubuntu 22.04中可能会看到类似enp3s0或ens160的命名,而非传统的eth0/eth1。这是systemd的predictable network interface命名规则,了解这一点对后续配置至关重要。
2. Netplan基础配置
Ubuntu从17.10开始引入Netplan作为默认的网络配置工具,它使用YAML格式的配置文件替代了传统的
/etc/network/interfaces
。Netplan的配置文件位于
/etc/netplan/
目录下,通常命名为
00-installer-config.yaml
或
50-cloud-init.yaml
。
一个典型的双网卡配置示例如下:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
addresses: [203.0.113.100/24]
routes:
- to: default
via: 203.0.113.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
enp4s0:
dhcp4: no
addresses: [192.168.1.100/24]
配置要点解析:
-
version: 2:指定使用Netplan的第二个版本配置格式 -
renderer:可选择networkd(systemd-networkd)或NetworkManager -
addresses:使用CIDR表示法(IP地址/子网掩码位数) -
routes:特别为外网接口指定默认路由 -
nameservers:建议至少配置两个DNS服务器
应用配置前,使用
netplan try
命令测试配置是否正确,这个命令会在应用后等待用户确认,如果网络连接断开(比如配置错误导致SSH断开),配置会自动回滚:
sudo netplan try
确认无误后,使用以下命令永久应用配置:
sudo netplan apply
3. 高级路由配置与多网段管理
在生产环境中,服务器可能需要访问多个内部网络段。假设内网接口enp4s0需要同时访问192.168.1.0/24和192.168.3.0/24两个网段,我们可以通过以下两种方式实现。
方法一:为同一物理接口添加多个IP地址
在Netplan配置中添加多个addresses条目:
enp4s0:
dhcp4: no
addresses:
- 192.168.1.100/24
- 192.168.3.100/24
方法二:创建虚拟接口(推荐)
enp4s0:
dhcp4: no
addresses: [192.168.1.100/24]
enp4s0:1:
dhcp4: no
addresses: [192.168.3.100/24]
对于更复杂的路由需求,可以添加静态路由。例如,需要通过特定网关访问10.8.0.0/16网络:
enp4s0:
routes:
- to: 10.8.0.0/16
via: 192.168.1.254
metric: 100
配置完成后,使用以下命令验证路由表:
ip route show
预期输出应包含类似以下内容:
default via 203.0.113.1 dev enp3s0 proto static
203.0.113.0/24 dev enp3s0 proto kernel scope link src 203.0.113.100
192.168.1.0/24 dev enp4s0 proto kernel scope link src 192.168.1.100
192.168.3.0/24 dev enp4s0 proto kernel scope link src 192.168.3.100
10.8.0.0/16 via 192.168.1.254 dev enp4s0 proto static metric 100
4. 连通性测试与故障排查
配置完成后,需要进行全面的网络测试以确保各功能正常。以下是推荐的测试流程:
-
基础连通性测试 :
ping -c 4 8.8.8.8 # 测试外网连通性 ping -c 4 192.168.1.1 # 测试内网网关 ping -c 4 192.168.3.123 # 测试跨网段通信 -
DNS解析测试 :
nslookup example.com dig @8.8.8.8 google.com -
路由追踪测试 :
traceroute -n 8.8.8.8
常见问题及解决方案:
-
无法访问外网 :
-
检查默认路由:
ip route show default -
验证网关可达性:
ping 203.0.113.1 -
检查防火墙规则:
sudo ufw status
-
检查默认路由:
-
内网通信问题 :
-
确认IP配置:
ip addr show dev enp4s0 -
检查ARP表:
ip neigh show - 验证交换机端口配置
-
确认IP配置:
-
DNS解析失败 :
-
检查
/etc/resolv.conf文件 -
测试直接使用DNS服务器查询:
dig @8.8.8.8 google.com -
查看systemd-resolved状态:
systemctl status systemd-resolved
-
检查
对于持久化的网络问题,可以使用
tcpdump
进行抓包分析:
sudo tcpdump -i enp4s0 -nn icmp # 捕获内网接口的ICMP流量
sudo tcpdump -i enp3s0 port 53 # 捕获外网接口的DNS查询
5. 安全加固与性能优化
完成基础配置后,我们需要考虑网络安全和性能优化。以下是一些关键措施:
防火墙配置(使用UFW) :
sudo ufw default deny incoming # 默认拒绝所有入站
sudo ufw default allow outgoing # 允许所有出站
sudo ufw allow in on enp4s0 from 192.168.1.0/24 # 允许内网访问
sudo ufw allow ssh # 允许SSH连接
sudo ufw enable
内核网络参数优化 :
编辑
/etc/sysctl.conf
文件,添加以下参数:
net.ipv4.ip_forward=1 # 启用IP转发(如需做路由器)
net.ipv4.tcp_syncookies=1 # 防御SYN洪水攻击
net.ipv4.conf.all.rp_filter=1 # 启用反向路径过滤
net.ipv4.tcp_tw_reuse=1 # 允许TIME-WAIT套接字重用
应用修改:
sudo sysctl -p
网络接口调优 :
检查并设置合适的MTU值(特别是对于VPN或特殊网络):
ip link show enp3s0 | grep mtu
sudo ip link set enp3s0 mtu 1500
对于高性能应用,可以考虑启用RSS(接收端缩放)和多队列:
sudo ethtool -L enp3s0 combined 8 # 设置8个队列
sudo ethtool -K enp3s0 rx on tx on # 启用硬件加速
6. 自动化管理与监控
在生产环境中,自动化配置和持续监控至关重要。以下是几种实用方案:
使用Ansible自动化配置 :
创建Netplay配置模板(templates/netplan.yaml.j2):
network:
version: 2
renderer: networkd
ethernets:
{{ wan_interface }}:
dhcp4: no
addresses: [{{ wan_ip }}/24]
routes:
- to: default
via: {{ wan_gateway }}
nameservers:
addresses: [{{ nameservers | join(',') }}]
{{ lan_interface }}:
dhcp4: no
addresses: [{{ lan_ip }}/24]
对应的Ansible playbook:
- hosts: servers
vars:
wan_interface: "enp3s0"
lan_interface: "enp4s0"
wan_ip: "203.0.113.100"
wan_gateway: "203.0.113.1"
lan_ip: "192.168.1.100"
nameservers:
- "8.8.8.8"
- "8.8.4.4"
tasks:
- name: Configure netplan
template:
src: templates/netplan.yaml.j2
dest: /etc/netplan/99-custom.yaml
- name: Apply netplan configuration
command: netplan apply
网络监控方案 :
安装并配置Prometheus node exporter收集网络指标:
sudo apt install prometheus-node-exporter
配置收集的网络指标包括:
- 网络接口流量(node_network_receive_bytes_total)
- 错误包计数(node_network_receive_errs_total)
- TCP连接状态(node_netstat_Tcp_CurrEstab)
结合Grafana可以创建直观的监控面板,实时显示:
- 各接口带宽利用率
- 错误包和丢包率
- TCP/UDP连接数
- 网络延迟变化
日志集中管理 :
配置rsyslog将网络相关日志发送到中央日志服务器:
# 在/etc/rsyslog.d/10-network.conf中添加
:msg, contains, "netplan" @logserver.example.com
:msg, contains, "networkd" @logserver.example.com
对于使用NetworkManager的系统,可以监控其日志:
journalctl -u NetworkManager -f
更多推荐



所有评论(0)