如何用 Ubuntu 系统搭建软路由
如何用 Ubuntu 系统搭建软路由 –(软路由入门篇)
前言
可能和大多数人一样,我开始玩软路由其实也是直接用开源的 OpenWrt 固件(系统),使用过程大概就是,把固件安装到一个多网卡的小主机上,然后在小主机上安装各种所需的软件,然后就开始用起来了。
直到最近我发现 OpenWrt 可玩性太低了,一个是它预装了很多我没用到的软件,其次是我想安装一些系软件 apk 源很难找到。因此我决定弃用 OpenWrt,直接使用我比较熟悉的 Ubuntu 作为我的软路由的系统。
这篇文章是我使用 Ubuntu 作为软路由的一些搭建过程的一些记录,分享给大家! 软路由在家庭网络的结构大致如下图所示:

本片文章可归纳为如下步骤:
- 1. 【准备工作】收集小主机的网卡信息,以及软路由网络规划
- 2. 【网络配置】用 Netplan 配置 Ubuntu 系统的网络配置
- 3. 【内核参数】启用内核 IP 转发功能
- 4. 【WAN 口 NAT 配置】公网出口网络地址转换
- 5. 【LAN 口 DHCP 配置】内网设备动态 IP 获取
准备工作
在小主机上安装好 Ubuntu 系统,通过如下命令查出系统上网卡的名称
ip link # 我的小主机有两块网卡名,分别是 enp1s0 / enp3s0
- • 下文约定 enp3s0 = WAN(接 ISP,走 DHCP),enp1s0 = LAN(给内网 192.168.100.1/24)
Netplan 配置网络
通过如下命令新建配置 01-soft-router.yaml
文件:
sudo vim /etc/netplan/01-soft-router.yaml
配置文件内容如下:
network:
version:2
renderer:networkd
ethernets:
enp3s0:# WAN 口
dhcp4:true
dhcp4-overrides:
route-metric:100# 只让它产生默认路由,用 route-metric 决定默认网关优先级
enp1s0:# LAN 口
dhcp4:false
addresses:[192.168.100.1/24]
运行如下命令使得配置生效:
sudo netplan apply
开启 IP 转发
要让 Ubuntu Server 变成一台路由器,还得开启一些内核参数,具体请往下看 编辑内核配置文件 sudo vim /etc/sysctl.conf
,使得内容如下
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
运行如下命令使得内核配置生效:
sudo sysctl -p
注意:(sysctl -w net.ipv4.ip_forward=1 只临时生效,重启会丢)
配置 NAT
这里我是用 nftables 做 NAT, 通过如下命令编辑 /etc/nftables.conf 配置文件:
sudo vim /etc/nftables.conf
/etc/nftables.conf 内容如下:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
ct state established,related accept
iif "lo" accept
iif "enp1s0" accept # 内网信任
tcp dport {22} accept # 允许外部 SSH
counter drop # 其他全部丢弃
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oif "enp3s0" masquerade # 出 WAN 做源地址伪装
}
}
运行如下命令使得 nftables 配置生效:
sudo systemctl enable --now nftables
给 LAN 口配置 HDCP
通过如下命令安装 isc-dhcp-server 软件:
sudo apt install isc-dhcp-server
通过如下命令编辑 dhcpd.conf 配置文件:
sudo vim /etc/dhcp/dhcpd.conf
dhcpd.conf 内容如下:
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.5 192.168.100.250;
option routers 192.168.100.1;
option domain-name-servers 223.5.5.5, 9.9.9.9; # 这里暂时使用公网的 dns 服务
}
通过如下命令编辑 isc-dhcp-server 的默认配置:
sudo vim /etc/default/isc-dhcp-server
/etc/default/isc-dhcp-server 配置如下:
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="enp1s0"# ==> 改动这一行
INTERFACESv6=""
最后,通过如下命令运行 dhcp-server:
sudo systemctl enable --now isc-dhcp-server
验证
把小主机的 WAN 口连接到光猫(光猫会通过 DHCP 配置给 WAN 口一个动态 IP),把小主机的 LAN 口插入到家庭路由器上(软路由会通过 DHCP 给家庭路由器动态分配一个 IP),然后用电脑正常连接到 WIFI 上,理论可以正常访问网络
开源、免费的MES系统
一款开源高效的自由职业管理系统
延伸阅读:
如何用 Ubuntu 系统搭建软路由
如何用 Ubuntu 系统搭建软路由 --(软路由入门篇)前言可能和大多数人一样,我开始玩软路由其实也是直接用开源的 O...
OpenWrt的最新稳定版本是24.10.1
系统特点高度模块化和自动化:OpenWrt是一个高度模块化的嵌入式Linux系统,用户可以根据需要选择安装的功能模块,而...