前言 买了台迷你主机,并打算把他当作家中的主路由来使用 这里使用的是非 Docker 方式的软路由搭建方式,一大堆坑,快被坑麻了,最后才汇总出这么一篇教程
Docker + OpenWRT 方式参看
N100双网口小主机使用docker版openwrt做主路由(PPPoE拨号)超详细!!!! | qllokirin
https://qllokirin.github.io/2024/04/11/25.N100_op/
背景
双网口 X86 主机
Ubuntu Server 2404
需求
为下游设备分配公网 IPv6
DNS 缓存
广告屏蔽
预期网络拓扑
网卡配置 确认网卡名称
应有类似输出
1 2 3 4 5 6 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 . . . 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 . . . 3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 . . .
其中 enp1s0
和 enp2s0
为两个网口的名称
本文中 enp1s0
作为 WAN,enp2s0
作为 LAN
打开网卡设置文件 /etc/netplan/50-cloud-init.yaml
,其中 50-cloud-init.yaml
每台设备可能有所不同
/etc/netplan/50-cloud-init.yaml 1 2 3 4 5 6 7 8 9 10 11 12 network: ethernets: enp1s0: dhcp4: true optional: true enp2s0: dhcp4: false optional: true addresses: - 192.168 .3 .1 /24 version: 2 renderer: networkd
其中 192.168.3.1
将作为本机 IP 及网关
输入如下指令生效
1 2 sudo netplan generate sudo netplan apply
启用转发 编辑 /etc/sysctl.conf
,在最末尾添加如下内容
1 2 3 4 5 6 7 8 9 10 # 启用 IPv4 转发 net.ipv4.ip_forward=1 # 启用 IPv6 转发 net.ipv6.conf.all.forwarding=2 net.ipv6.conf.default.forwarding=2 net.ipv6.conf.all.accept_ra=2 net.ipv6.conf.default.accept_ra=2 net.ipv6.conf.all.use_tempaddr=2 net.ipv6.conf.default.use_tempaddr=2
输入如下指令生效
配置 DNSmasq DNSmasq
可以提供 DNS 缓存和 DHCP 服务
安装 DNSmasq
1 sudo apt install dnsmasq -y
配置其配置文件 /etc/dnsmasq.conf
,添加如下内容
/etc/dnsmasq.conf 1 2 3 4 5 6 7 8 9 10 listen-address=127.0.0.1, 192.168.3.1 # 设置 DNS 缓存监听地址 port=53 # 指定 DNS 端口,用于 DHCP/TFTP server=223.5.5.5 # 指定外网 DNS interface=enp2s0 # 指定内网网口 dhcp-range=192.168.3.3,192.168.3.255,255.255.255.0,12h # 用于分配的起始/结束 IP,子网掩码,租期 dhcp-option=option:router,192.168.3.1 # 指定 DHCP 网关 enable-ra # 启用 Router Advertisements dhcp-range=::,constructor:enp2s0,ra-only,slaac # 向局域网发送 RA,使用 slaac 分配地址,此处需注意网卡
启用 DNSmasq
1 2 3 4 5 sudo systemctl stop systemd-resolved.service sudo systemctl disable systemd-resolved.service sudo systemctl enable dnsmasq.service
配置防火墙 本文使用 iptables
来进行路由设置
1 2 3 4 5 sudo ufw disable sudo apt remove --auto-remove nftables sudo apt purge nftables sudo apt install iptables sudo apt install iptables-persistent
配置 iptables
1 2 3 4 5 6 7 8 sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE sudo iptables -A INPUT -p ipv6-icmp -j ACCEPT sudo iptables -A FORWARD -p ipv6-icmp -j ACCEPT sudo iptables -A OUTPUT -p ipv6-icmp -j ACCEPT sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT sudo ip6tables -A FORWARD -p ipv6-icmp -j ACCEPT sudo ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT sudo netfilter-persistent save
配置 PPPoE 拨号上网 安装 pppoeconf
1 sudo apt install pppoeconf -y
将 enp1s0
接到光猫上,不如后面无法扫描到网络
输入如下指令配置 pppoeconf
按照提示输入运营商账号密码,其他一路 Yes 即可
打开 /etc/ppp/peers/dsl-provider
并在末尾添加如下内容
/etc/ppp/peers/dsl-provider
重启电脑并检查网络
应出现一个名为 ppp0
的网卡,并有相应的 IPv4/IPv6 地址
为下游设备分配 IPv6 安装 wide-dhcpv6-client
1 sudo apt install wide-dhcpv6-client
打开 /etc/wide-dhcpv6/dhcp6c.conf
并修改为如下内容
/etc/wide-dhcpv6/dhcp6c.conf 1 2 3 4 5 6 7 8 interface ppp0 { send ia-pd 0; }; id-assoc pd 0 { prefix-interface enp2s0 { # 记得修改为你的 LAN 口 sla-id 1; }; };
新建 /etc/systemd/system/dhcp6c.service
并键入如下内容
/etc/systemd/system/dhcp6c.service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [Unit] Description=WIDE DHCPv6 Client Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/sbin/dhcp6c -f ppp0 ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure RestartSec=3 NoNewPrivileges=yes PrivateTmp=yes ProtectHome=yes ProtectSystem=strict ReadWritePaths=/run/ /var/log/ ProtectKernelTunables=yes ProtectControlGroups=yes SystemCallFilter=~@mount SystemCallArchitectures=native LockPersonality=yes MemoryDenyWriteExecute=yes RestrictRealtime=yes RemoveIPC=yes [Install] WantedBy=multi-user.target
随后
1 2 3 systemctl stop wide-dhcpv6-client.service systemctl disable wide-dhcpv6-client.service systemctl enable dhcp6c.service
重启电脑,完成路由设置
anti-AD 广告屏蔽 利用 anti-AD 所提供的 DNSmasq 配置文件来进行广告屏蔽
打开 /etc/dnsmasq.conf
,添加如下内容
/etc/dnsmasq.conf 1 addn-hosts=/etc/dnsmasq.host
输入如下指令
1 2 sudo wget https://anti-ad.net/anti-ad-for-dnsmasq.conf -O /etc/dnsmasq.host sudo systemctl restart dnsmasq.service
在 /etc
下新建 host.sh
并键入如下内容
/etc/host.sh 1 2 sudo wget https://anti-ad.net/anti-ad-for-dnsmasq.conf -O /etc/dnsmasq.host systemctl restart dnsmasq.service
以超级用户的身份进入 CRON
添加如下规则
每小时将执行一次 /etc/host.sh
以同步广告列表
旁路由设置 断开旁路由的所有网线并重置旁路由 将电脑网口与路由器 LAN 口相连,进入路由管理页面 设置如下:
静态 IP 上网
IP 地址:192.168.3.2
子网掩码:255.255.255.0
默认网关:192.168.3.1
首选 DNS 服务器:192.168.3.1
路由器局域网地址:192.168.4.1
保存,随后将旁路由的 WAN 口与主路由的 LAN 口相连,完成设置
连接 WIFI,可以使用 192.168.4.1
进入旁路由设置,也可以通过 192.168.3.1
进入主路由设置
相关问题
配置 IPv6 后部分网站无法访问 诸如百度、知乎,博客园等网站使用在启用 IPv6 后无法打开,可能是因为 MSS 值设置的原因
将 MSS 值设为 1432
1 2 sudo ip6tables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ppp0 -j TCPMSS --set-mss 1432 sudo netfilter-persistent save
感谢
如何使用Debian/Ubuntu等Linux做软路由(物理机版本,非虚拟机容器版) - 知乎
https://zhuanlan.zhihu.com/p/587068225
X86 软路由配置 IPv6 踩坑小记
https://blog.otakusaikou.com/2020/11/11/x86-soft-router-and-ipv6/
解决PPPoE宽带上网IPv6卡顿问题 - 王晔
https://wangye.org/posts/2023/08/circumventing-ipv6-path-mtu-discovery-issues-with-mss-clamping.html