1. 项目概述
在Ubuntu系统上搭建路由功能是一个实用且经济高效的选择,尤其适合需要灵活网络配置的开发者和中小企业。Ubuntu作为一款稳定且功能丰富的Linux发行版,提供了完善的网络管理工具和软件包支持,能够轻松实现路由转发、NAT转换、防火墙规则等核心功能。
传统路由器硬件价格昂贵且功能受限,而基于Ubuntu的路由方案可以根据实际需求灵活调整配置,支持更复杂的网络拓扑和高级功能。无论是作为家庭网关、企业边缘路由器,还是用于网络实验环境,Ubuntu路由都能提供专业级的性能和可靠性。
2. 环境准备与网络规划
2.1 硬件需求分析
搭建Ubuntu路由对硬件要求相对灵活,主要取决于网络规模和流量负载。对于家庭或小型办公室环境,一台配备双网卡的普通PC即可胜任。建议配置:
- CPU:至少双核处理器(如Intel i3或同级AMD处理器)
- 内存:4GB以上(处理大量并发连接时建议8GB)
- 存储:16GB SSD足够安装系统和基础软件
- 网卡:至少两个物理网口(建议使用Intel或Realtek千兆网卡)
对于需要处理更高流量的场景,可以考虑使用专业服务器或工业级迷你PC。网卡选择上,Intel I350-T4等多端口服务器网卡能提供更好的性能和稳定性。
2.2 Ubuntu系统安装要点
推荐使用Ubuntu Server LTS版本(如22.04或24.04),它们提供长期支持且稳定性更好。安装时需注意:
- 分区方案:建议单独划分/boot(500MB)、/(15GB)、swap(内存大小的1-1.5倍)
- 软件选择:仅安装"标准系统工具",不选其他附加软件
- 网络配置:安装时暂时只配置一个网口(如eth0)用于管理访问
安装完成后立即执行系统更新:
bash复制sudo apt update && sudo apt upgrade -y
2.3 网络接口规划
合理的网络规划是路由稳定运行的基础。典型的两接口配置方案:
-
WAN口(eth0):连接外网(DHCP或PPPoE)
- IP获取方式:动态(DHCP)或静态
- MTU设置:通常1500(PPPoE建议1492)
-
LAN口(eth1):连接内网设备
- IP地址:建议使用私有地址段如192.168.1.1/24
- DHCP服务:为内网设备分配IP
多接口场景下(如DMZ区),可添加eth2等额外接口,每个接口对应不同子网。
3. 核心路由功能实现
3.1 启用IP转发功能
路由的核心是IP数据包转发,需修改系统配置启用该功能:
- 临时启用(重启失效):
bash复制sudo sysctl -w net.ipv4.ip_forward=1
- 永久生效配置:
bash复制echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-ipforward.conf
sudo sysctl -p /etc/sysctl.d/99-ipforward.conf
对于IPv6网络,还需启用IPv6转发:
bash复制echo "net.ipv6.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.d/99-ipforward.conf
3.2 配置网络接口
Ubuntu使用Netplan进行网络配置,编辑YAML配置文件:
bash复制sudo nano /etc/netplan/01-netcfg.yaml
典型配置示例(静态IP方案):
yaml复制network:
version: 2
renderer: networkd
ethernets:
eth0: # WAN口
dhcp4: true
optional: true
eth1: # LAN口
addresses: [192.168.1.1/24]
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
应用配置:
bash复制sudo netplan apply
注意:如果使用PPPoE拨号,需要先安装pppoe包:
bash复制sudo apt install pppoe
3.3 设置NAT转发
使内网设备能够访问外网,需配置NAT(网络地址转换):
- 使用iptables设置NAT规则:
bash复制sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
- 持久化iptables规则:
bash复制sudo apt install iptables-persistent
sudo netfilter-persistent save
对于IPv6,需要使用ip6tables设置类似的NAT规则。
4. 高级功能配置
4.1 DHCP服务部署
为内网设备自动分配IP地址,安装并配置ISC DHCP服务器:
- 安装DHCP服务:
bash复制sudo apt install isc-dhcp-server
- 配置DHCP服务:
bash复制sudo nano /etc/dhcp/dhcpd.conf
示例配置:
conf复制subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option domain-name "local";
default-lease-time 600;
max-lease-time 7200;
}
- 指定服务监听接口:
bash复制sudo nano /etc/default/isc-dhcp-server
修改为:
conf复制INTERFACESv4="eth1"
INTERFACESv6=""
- 启动服务:
bash复制sudo systemctl enable isc-dhcp-server
sudo systemctl start isc-dhcp-server
4.2 防火墙配置
使用UFW(Uncomplicated Firewall)简化防火墙管理:
- 安装UFW:
bash复制sudo apt install ufw
- 基础规则配置:
bash复制sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh # 允许SSH管理
sudo ufw allow in on eth1 # 允许所有LAN口入站
- 端口转发示例(将WAN口80端口转发到内网服务器):
bash复制sudo nano /etc/ufw/before.rules
添加:
conf复制*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
COMMIT
- 启用UFW:
bash复制sudo ufw enable
4.3 QoS流量控制
使用TC(Traffic Control)进行流量整形,确保关键应用带宽:
- 创建HTB队列:
bash复制sudo tc qdisc add dev eth0 root handle 1: htb default 10
- 设置总带宽限制(示例为100Mbps):
bash复制sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
- 为不同服务分配带宽(示例为SSH保障10Mbps):
bash复制sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 20mbit
sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:10
- 监控流量状态:
bash复制sudo tc -s qdisc show dev eth0
5. 系统优化与监控
5.1 内核参数调优
编辑sysctl.conf优化网络性能:
bash复制sudo nano /etc/sysctl.conf
添加以下参数:
conf复制# 增加TCP窗口大小
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# 减少TIME_WAIT连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 提高并发连接处理能力
net.core.somaxconn = 32768
net.ipv4.tcp_max_syn_backlog = 8192
应用配置:
bash复制sudo sysctl -p
5.2 日志与监控
安装并配置常用监控工具:
- 安装基础工具:
bash复制sudo apt install htop iftop nload vnstat
- 配置vnstat进行流量统计:
bash复制sudo vnstat -u -i eth0
sudo vnstat -u -i eth1
- 设置日志轮转:
bash复制sudo nano /etc/logrotate.d/network
添加:
conf复制/var/log/network.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
5.3 高可用性配置
对于关键业务环境,可配置双WAN负载均衡:
- 安装必要的软件包:
bash复制sudo apt install iproute2
- 创建路由表:
bash复制echo "200 wan1" | sudo tee -a /etc/iproute2/rt_tables
echo "201 wan2" | sudo tee -a /etc/iproute2/rt_tables
- 配置策略路由:
bash复制sudo ip rule add from 192.168.1.0/24 table wan1
sudo ip rule add from 192.168.2.0/24 table wan2
sudo ip route add default via 1.1.1.1 dev eth0 table wan1
sudo ip route add default via 2.2.2.1 dev eth2 table wan2
6. 常见问题排查
6.1 网络连接故障
- 接口未激活:
bash复制ip link show # 检查接口状态
sudo ip link set eth0 up # 启用接口
- 路由表问题:
bash复制ip route show # 查看路由表
sudo ip route add default via 网关IP # 添加默认路由
- DNS解析失败:
bash复制dig example.com # 测试DNS解析
sudo nano /etc/resolv.conf # 检查DNS配置
6.2 NAT转发失效
- 检查iptables规则:
bash复制sudo iptables -t nat -L -v -n
- 确认IP转发已启用:
bash复制cat /proc/sys/net/ipv4/ip_forward
- 检查MASQUERADE规则:
bash复制sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
6.3 性能瓶颈分析
- 查看CPU和内存使用:
bash复制top
htop
- 监控网络吞吐量:
bash复制iftop -i eth0
nload eth0
- 检查中断平衡:
bash复制cat /proc/interrupts # 查看中断分布
sudo apt install irqbalance # 安装中断平衡工具
7. 安全加固措施
7.1 基础安全配置
- 更改默认SSH端口:
bash复制sudo nano /etc/ssh/sshd_config
修改:
conf复制Port 2222
PermitRootLogin no
PasswordAuthentication no
- 启用自动安全更新:
bash复制sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
- 配置fail2ban防止暴力破解:
bash复制sudo apt install fail2ban
sudo systemctl enable fail2ban
7.2 网络隔离策略
- 隔离管理接口:
bash复制sudo iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP
- 禁用ICMP重定向:
bash复制echo "net.ipv4.conf.all.accept_redirects=0" | sudo tee -a /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_redirects=0" | sudo tee -a /etc/sysctl.conf
- 启用SYN Cookie防护:
bash复制echo "net.ipv4.tcp_syncookies=1" | sudo tee -a /etc/sysctl.conf
7.3 定期维护任务
- 设置日志清理定时任务:
bash复制sudo crontab -e
添加:
conf复制0 3 * * * /usr/sbin/logrotate /etc/logrotate.conf
- 配置定期安全扫描:
bash复制sudo apt install lynis
sudo lynis audit system
- 备份重要配置文件:
bash复制sudo tar czf /backup/network_config_$(date +%F).tar.gz /etc/network /etc/iptables
