基于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-persistent
root 身份运行脚本, 然后执行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 | { |
对应的启动 systemd
service 内容为:
1 | [Unit] |
测试: 在软路由上执行 curl --socks5 localhost:1080 google.com
如果可以访问,说明配置成功。接下来配置透明代理
透明代理
创建 tproxy.sh
脚本
1 |
|
创建清理 iptables 脚本 clean_iptables.sh
1 |
|
执行 tproxy.sh
即可开启透明代理
优化一下 systemd
1 | [Unit] |