基于Ubuntu的软路由搭建记录
前言
我一直使用的是斐讯 k3 这款万元路由器😂,一直用的是 openwrt,不过 openwrt 信号真心不好,刷回官方 root 系统,感觉重获了新生,然后决定路由器只做 WiFi 共享,其他功能交给软路由。
我的软路由是买的双网口机器,j4125 的 cpu 做软路由绰绰有余了, 东西如图:
系统使用的是 ubuntu22.04,以下步骤都以此系统为基础进行,网络拓扑如下:
我自己定义的网段,网段不可以有交叉。
| 设备 | LAN 网段 | WAN 配置 | 
|---|---|---|
| 光猫 | 192.168.1.0/24 | 拨号上网 | 
| 软路由 | 192.168.3.0/24 | DHCP 自动获取地址 | 
| 斐讯路由器 | 192.168.2.0/24 | 固定 IP,固定网关地址 | 
定义内外网
| 网卡设备名 | 定义 | 
|---|---|
| enp1s0 | 外网 | 
| enp2s0 | 内网 | 
那么 给外网网卡设置 dhcp,从光猫自动获取 ip,也可以手动设置 ip
内网网卡固定个 ip,不用设置网关和 dns,配置文件如下
vim /etc/netplan/00-installer-config.yaml
1  | network:  | 
验证:ip a 看下两张网卡是否都有了 ip,在软路由里执行 curl baidu.com 看看是否可以上网
完成路由功能
关闭 ufw
1  | systemctl disable --now ufw  | 
加载 nf_conntrack 模块
vim /etc/modules-load.d/custom-modules.conf
1  | # Located in /etc/modules-load.d/custom-modules.conf  | 
lsmod 查看有没有加载此模块, nf_conntrack 用于跟踪 iptables 规则。
修改内核参数
vim /etc/sysctl.d/99-forward.conf
1  | # Located in /etc/sysctl.d/99-forward.conf  | 
iptables 脚本
1  | 
  | 
以下步骤二选一:
- 开机执行此脚本
 - 使用 
iptables-persistent进行持久化配置:sudo apt install iptables-persistentroot 身份运行脚本, 然后执行netfilter-persistent save 
验证: 连接斐讯路由器, 路由器 WAN 口 IP 配置成 192.168.3.2,WAN 口网关配置成 192.168.3.1,WAN 口 DNS 配置成 114.114.114.114,检查通过斐讯路由器是否可以上网
部署 DHCP 服务(可选)
部署 DHCP 服务可以自动分配 IP,省去手动设置 IP 的烦恼,比如上一步的斐讯路由器手动配置 WAN 口 IP,有了 DHCP 后设置 WAN 口 DHCP 获取 IP 即可。另外如果路由器设置成 AP 模式, 可以利用软路由上面的 DHCP 来给客户端分配 IP 地址。
安装 DNSMASQ
1  | sudo apt install dnsmasq  | 
修改配置文件
dnsmasq 的 dns 服务和 systemd-resolved.service 冲突(都占用 udp53 端口),所以需要关闭 systemd-resolved.service 或者 dnsmasq 的 dns 服务。这里关闭 dnsmasq 的 dns 服务
注意:/etc/dnsmasq.d 里面的其他文件不要有冲突的配置项,同一项配置注意删除只保留一个。
cat /etc/dnsmasq.d/router.conf
1  | # 监听的网卡  | 
查看租期
1  | cat /var/lib/misc/dnsmasq.leases  | 
路由器使用 AP 模式 (可选)
使用 AP 模式就是不使用任何路由器的管理功能, 仅仅当作一个发射 WIFI 的工具,DNS 和 DHCP 都由软路由来提供, 配置上面的 DNSMASQ 来实现。
路由器上如果有 AP 模式选项, 则开启后, 网线插入 LAN 口, 如果没有 AP 模式选项, 则关闭路由器的 DHCP 服务,然后网线插入 LAN 口来使用。
优化: 开启 TCP BBR
BBR 不开启也不影响使用
内核版本大于 4.9 默认都是集成了 BBR 模块的, 直接通过修改内核参数的方式来开启即可.
vim sysctl.d/99-bbr.conf
1  | net.core.default_qdisc=fq  | 
1  | sysctl -p  | 
查看, 如果结果中包含 bbr, 则说明已开启
1  | sysctl net.ipv4.tcp_available_congestion_control  | 
代理工具配置
透明代理我用的是 v2ray 这个涉及服务端和客户端。
服务端
v2ray 服务端配置
1  | {  | 
nginx 反代配置
1  | upstream v2ray {  | 
客户端
1  | {  | 
对应的启动 systemdservice 内容为:
1  | [Unit]  | 
测试: 在软路由上执行 curl --socks5 localhost:1080 google.com 如果可以访问,说明配置成功。接下来配置透明代理
透明代理
创建 tproxy.sh 脚本
1  | 
  | 
创建清理 iptables 脚本 clean_iptables.sh
1  | 
  | 
执行 tproxy.sh 即可开启透明代理
优化一下 systemd
1  | [Unit]  | 

