上个月攒了台小主机作为家庭服务器,安装了 pve 虚拟机平台,并在平台上安装了 openwrt/lede 软路由系统。科学上网、去广告等功能直接在路由器级别使用确实很爽。因为服务器的性能还是有不少的冗余,我想再装个 ubuntu 系统作为一个自己折腾用的路由器,然后在上面直接运行我自己写的梯子软件,毕竟自己的写梯子用起来也更放心一些。

一个路由器最基础得拥有三个功能,nat 转发、dhcp 服务、dns 服务。linux 来实现这三个功能是非常简单的,nat 转发使用 iptables 来实现,dhcp 和 dns 使用 dnsmasq 来实现就行了。

硬件基础

最少拥有两个网口,可插入两根网线。也就是说最少有一个 wan 口,一个 lan 口。

安装系统

安装系统就不多说了,直接下载目前最新的 LTS 版本 ubuntu server 18.04 安装就行了。

配置 wan 口

我的机器目前只有两个物理网卡,一个作为 wan 口,一个作为 lan 口,当然有更多的网口就更好了,配置方法都是一样的。 ubuntu 18.04 和之前的版本的网卡配置有变化,现在配置文件是 /etc/netplan/50-cloud-init.yaml。由于我家的网络不是拨号上网的,插上网线就能分配到 ip 上网,所以我的配置就很简单了,只保留 wan 口作为 dhcp 客户端就行了。

1
2
3
4
5
6
network:
ethernets:
    # wan 口网卡名为 ens18,配置为 dncp 获取 ip 就行了。ip link 命令可以查看自己的网络设备名
    ens18:
        dhcp4: true
version: 2

然后执行 netplan apply 使它生效。

配置 lan 口

路由器一般会有多个 lan 口组成一个交换机。linux 来实现这个功能很简单,配置一个网桥,并把多个 lan 口都加入这个网桥就行了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 添加一个名为 br-lan 的网桥设备
ip link add br-lan type bridge

# 将所有作为 lan 口的网卡都加入到 br-lan 中 我的 lan 口网卡名为 ens19 有多个 lan 网口就依次执行几次
ip link set dev ens19 master br-lan

# 给网桥设置一个 ip 作为路由器的管理 ip 和网关
ip addr add 10.1.1.1/24 dev br-lan

# 开启所有 lan 网卡 多个网卡需要依次设置
ip link set ens19 up

# 开启网桥
ip link set br-lan up

上面的每次命令执行后,都可以用 ip addr 和 ip link 来查看修改是否成功。

配置 nat

首先需要先开启系统的转发功能,打开 /etc/sysctl.conf, 在文件的最后加入

1
net.ipv4.ip_forward=1

执行 sysctl -p 使它生效。然后通过 iptables 来设置 nat。

1
2
3
4
# 内网去外网的 nat 转发 ens18 是 wan 口网卡名称
# 因为默认路由是从 ens18 出网,所以可以直接这么设置
# 路由路径可以使用 route -n 查看
iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE

这个时候路由器已经可以使用了,wan 口连接外网,lan 口插入 pc。pc 手动设置一个 10.1.1.0/24 网络内的 ip,并把网关指向 10.1.1.1 就行了。

配置 dhcp 和 dns 服务

经过上面的配置,我们已经得到一个能用的路由器了,但是每次客户端都要手动配置 ip,还是很麻烦的。下面我们安装 dhcp 服务来自动分发 ip 和解析域名的 dns 服务。

我们用 dnsmasq 刚好能实现这两个功能,那么先安装

1
2
apt update
apt install -y dnsmasq

安装好之后修改配置文件 /etc/dnsmasq.conf,关键配置如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 下发网关为网桥的 ip
dhcp-option=option:router,10.1.1.1

# 下发的 dns 服务地址
dhcp-option=option:dns-server,10.1.1.1

# 分配 ip 范围 子网掩码 租期
dhcp-range=10.1.1.100,10.1.1.254,255.255.255.0,12h

# dns 服务端口
port=53

# 严格按照 resolv-file 文件中的顺序从上到下进行 DNS 解析
strict-order

配置上级 dns 服务器,打开 /etc/resolv.conf

1
2
nameserver 114.114.114.114
nameserver 8.8.8.8

开启服务并设置开机启动

1
2
systemctl enable dnsmasq
systemctl start dnsmasq

这时候把 pc 手动指定的 ip 去掉,过一会儿就自动获取到路由器分发的 ip 了,目前我们自己打造的路由器就和普通家用路由器没有什么区别了。