如何用 Ubuntu 系统搭建软路由

如何用 Ubuntu 系统搭建软路由 –(软路由入门篇)

前言

可能和大多数人一样,我开始玩软路由其实也是直接用开源的 OpenWrt 固件(系统),使用过程大概就是,把固件安装到一个多网卡的小主机上,然后在小主机上安装各种所需的软件,然后就开始用起来了。

直到最近我发现 OpenWrt 可玩性太低了,一个是它预装了很多我没用到的软件,其次是我想安装一些系软件 apk 源很难找到。因此我决定弃用 OpenWrt,直接使用我比较熟悉的 Ubuntu 作为我的软路由的系统。

这篇文章是我使用 Ubuntu 作为软路由的一些搭建过程的一些记录,分享给大家! 软路由在家庭网络的结构大致如下图所示:

图片

本片文章可归纳为如下步骤:

  1. 1. 【准备工作】收集小主机的网卡信息,以及软路由网络规划
  2. 2. 【网络配置】用 Netplan 配置 Ubuntu 系统的网络配置
  3. 3. 【内核参数】启用内核 IP 转发功能
  4. 4. 【WAN 口 NAT 配置】公网出口网络地址转换
  5. 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 上,理论可以正常访问网络

暂无介绍....

延伸阅读:

如何用 Ubuntu 系统搭建软路由

如何用 Ubuntu 系统搭建软路由 --(软路由入门篇)前言可能和大多数人一样,我开始玩软路由其实也是直接用开源的 O...

guozhiman
2025年7月16日
新手如何搭建软路由:完整教程

一、什么是软路由1.1 软路由的定义软路由(Soft Router)顾名思义,就是软件路由器,它是通过硬件和软件相结合组...

guozhiman
2025年6月23日
OpenWrt的最新稳定版本是24.10.1

系统特点高度模块化和自动化:OpenWrt是一个高度模块化的嵌入式Linux系统,用户可以根据需要选择安装的功能模块,而...

guozhiman
2025年5月21日