ubuntu linux nanopi r3s 全局路由网关配置
#linux,#NanoPi R3S,#anti-AD,#Netplan,#iptables,#DNSmasq,
- 网络搭建思路如下,设备是 nanopir3s 官方 ubuntu 系统,用户为 root ,其中 enp1s0(lan) end0(wan)
- 安装依赖工具
- nmtui 修改 enp1s0(lan) end0(wan) 网口的 netplan 配置, wan 口自动识别 lan 口固定
- 让自定义的 Netplan 网络配置生效
- 编辑 /etc/sysctl.conf 启用 ipv4/6 转发
- 让转发功能生效
- anti-AD 广告屏蔽(可选,如无需配置,请在以下步骤特意删除此项)
- 为 root 用户编辑自动任务
- 编辑 DNSmasq 提供 DNS 缓存和 DHCP 服务
- 启用 DNSmasq 服务
- 配置防火墙 iptables 规则
- wan 口插上拨号宽带网线,配置 PPPoE 拨号上网,按照提示输入宽带账号密码,剩下都是 yes 同意
- 编辑已经生成的 PPPoE 配置文件最后一行添加 ipv6 支持
- 为下游设备分配 IPv6 编辑 /etc/wide-dhcpv6/dhcp6c.conf 并修改
- 创建自启动服务,最后重启linux,将网线从wan口切换到lan口,检查联网
- 主路由器中开启全局广播 DNS 和 GATEWAY
- 接下来你就可以自由自在想做什么就做什么了
- 参考
网络搭建思路如下,设备是 nanopir3s 官方 ubuntu 系统,用户为 root ,其中 enp1s0(lan) end0(wan)
(((·)))
\
(wifi 2.4/5g 桥接)
\
+-----------------------------------+
| 主路由器 | +-------------------------+
|-----------------------------------| | my computer |
| WAN: wifi网络桥接 |--- (lan) ---| IP: 192.168.255.54 |
| LAN: 192.168.255.254 | | DNS: 192.168.255.253 |
| DHCP: 1~253 | | GATEWAY: 192.168.255.253|
| DNS: 192.168.255.254 | +-------------------------+
| 全局旁路由 DNS: 192.168.255.253 |
| 全局旁路由 GATEWAY: 192.168.255.253 |
+-----------------------------------+
| \
| \
(lan) (wifi 2.4/5g 连接)
| \
| \
+------------------+--------------------+ \
| nanopir3s ubuntu (旁路由网关) | +-------------------------+
|---------------------------------------| | my cell phone |
| LAN: 192.168.255.253 | | IP: 192.168.255.53 |
| DNS: 192.168.255.254 | | DNS: 192.168.255.253 |
| GATEWAY: 192.168.255.254 | | GATEWAY: 192.168.255.253|
| linux 配置全局 DHCP: 1~252 | +-------------------------+
| linux 配置全局 DNS: 192.168.255.253 |
| linux 配置全局 GATEWAY: 192.168.255.253 |
+---------------------------------------+
安装依赖工具
先查看网络接口 enp1s0(lan) end0(wan) 其中 wan 口连接了网线状态是 UP ,lan 未接网线处于 DOWN 关闭状态
ip link
接口记录如下
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether ae:a6:b7:96:be:90 brd ff:ff:ff:ff:ff:ff
3: end0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 56:ea:01:c9:30:d0 brd ff:ff:ff:ff:ff:ff
altname enx56ea01c930d0
安装工具,安装时会提示填写 dhcpv6 客户端接口,输入 lan wan 口也就是 enp1s0 end0
sudo apt -y remove --auto-remove iptables iptables-persistent
sudo apt -y purge iptables iptables-persistent
sudo apt -y install dnsmasq nftables \
pppoeconf wide-dhcpv6-client
修改 enp1s0(lan) end0(wan) 网口的 netplan 配置, wan 口自动识别 lan 口固定
sudo nano /etc/netplan/10-dhcp-all-interfaces.yaml
配置内容大概如下
10-dhcp-all-interfaces.yaml
# Reference: https://netplan.readthedocs.io/en/stable/netplan-yaml/
#
# Let systemd-networkd manage all Ethernet devices on this system, but be configured by Netplan.
# Netplan 网络配置文件
# 使用 systemd-networkd 作为后端
network:
version: 2 # Netplan 配置语法版本
renderer: networkd # 使用 systemd-networkd 作为网络后端
ethernets:
enp1s0: # 主网卡(LAN),使用静态 IPv4,作为默认出口 include interfaces that are renamed to 'lanX' by udev, e.g. nanopi-r2s
match:
#name: "enp1s0" # 匹配系统中的 enp1s0 网卡
name: "enp[0-9]*" # 匹配 enp1s0(lan)
dhcp4: no # 禁/启用 DHCP 获取 IPv4,使用动态地址
addresses:
- "192.168.255.253/24" # 分配静态 IPv4 地址(子网掩码为 255.255.255.0)
nameservers:
addresses:
#- 198.18.0.1 # 指定 DNS 服务器(可指向主路由器)
#- 192.168.255.253 # 指定 DNS 服务器(可指向主路由器)
- 192.168.255.254
- 223.5.5.5 # 指定 DNS 服务器(可指向主路由器)
- 114.114.114.114 # 指定 DNS 服务器(可指向主路由器)
routes:
- to: 0.0.0.0/0 # 设置默认网关(出口)
via: 192.168.255.254 # 默认路由走向主路由器
# table: 101
#routing-policy:
# - from: 192.168.255.0/24
# table: 101
dhcp6: yes # 启用 DHCPv6(动态获取 IPv6 地址)
ipv6-privacy: yes # 启用 IPv6 地址隐私扩展(生成临时地址防止追踪)Enabled by default on most current systems, but networkd currently doesn't enable IPv6 privacy by default, see https://man.archlinux.org/man/systemd.network.5
dhcp6-overrides: # 修改 DHCPv6 行为
route-metric: 100 # 设置 IPv6 路由优先级(较低值优先)
use-dns: yes # 使用 DHCPv6 提供的 DNS
wakeonlan: yes # 启用唤醒网络功能(Wake-on-LAN)
end0: # 次级网卡(WAN),由上级网络通过 DHCP 提供配置 include interfaces that are renamed to 'wanX' by udev, e.g. nanopi-r1
match:
#name: "end0" # 匹配系统中的 end0 网卡
name: "end[0-9]*" # 匹配 end0(wan)
dhcp4: yes # 禁/启用 DHCP 获取 IPv4,使用动态地址
#addresses:
# - "192.168.255.252/24" # 分配静态 IPv4 地址(子网掩码为 255.255.255.0)
#nameservers:
# addresses:
# - 198.18.0.1 # 指定 DNS 服务器(可指向主路由器)
# - 192.168.255.253 # 指定 DNS 服务器(可指向主路由器)
# - 223.5.5.5 # 指定 DNS 服务器(可指向主路由器)
# - 114.114.114.114 # 指定 DNS 服务器(可指向主路由器)
#routes:
# - to: 0.0.0.0/0 # 设置默认网关(出口)
# via: 192.168.255.253 # 默认路由走向主路由器
# table: 100
#routing-policy:
# - from: 192.168.255.0/24
# table: 100
dhcp6: yes # 启用 DHCPv6 获取 IPv6 地址
ipv6-privacy: yes # 启用 IPv6 地址隐私扩展
dhcp4-overrides: # 修改 DHCPv4 行为
route-metric: 200 # 设置 IPv4 路由优先级(更高值 → 较低优先级)
use-dns: yes # 使用 DHCP 提供的 DNS
dhcp6-overrides: # 修改 DHCPv6 行为
route-metric: 200 # 设置 IPv6 路由优先级
use-dns: yes
wakeonlan: yes # 启用 Wake-on-LAN 功能
让自定义的 Netplan 网络配置生效
sudo netplan generate
sudo netplan apply
编辑 /etc/sysctl.d/99-forwarding.conf 启用 ipv4/6 转发
sudo nano /etc/sysctl.d/99-forwarding.conf
追加内容如下
# /etc/sysctl.d/99-forwarding.conf
#
# 启用 IPv4 转发
net.ipv4.ip_forward=1
# 启用 IPv6 转发
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
# 接受上游路由通告 (RA),获取 IPv6 前缀
net.ipv6.conf.all.accept_ra=1
net.ipv6.conf.default.accept_ra=1
# 开启 IPv6 临时地址 (隐私扩展)
net.ipv6.conf.all.use_tempaddr=1
net.ipv6.conf.default.use_tempaddr=1
让转发功能生效
# 更新 systemd-sysctl 并验证
sudo systemctl restart systemd-sysctl
sudo sysctl net.ipv4.ip_forward
sudo sysctl net.ipv6.conf.all.forwarding
sudo sysctl -p
anti-AD 广告屏蔽(可选,如无需配置,请在以下步骤特意删除此项)
sudo wget https://anti-ad.net/anti-ad-for-dnsmasq.conf \
-O"/etc/dnsmasq.host"
sudo chmod -v a+x /etc/dnsmasq.host
添加自动更新任务更新广告屏蔽配置文件
cat << '469138946ba5fa' | sudo tee /etc/host.sh
#!/usr/bin/env bash
wget https://anti-ad.net/anti-ad-for-dnsmasq.conf \
-O"/etc/dnsmasq.host.bak"
mv -fv /etc/dnsmasq.host
systemctl restart dnsmasq.service
469138946ba5fa
sudo chmod -v a+x /etc/host.sh
为 root 用户编辑自动任务
# 为 root 用户编辑自动任务
sudo su - root bash -c 'crontab -e'
可能会出现以下内容,选择你习惯的编辑器,比如 1 回车
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /bin/ed
Choose 1-4 [1]:
新增自动任务的内容如下,每小时 0 分执行更新任务,保存并退出
0 * * * * /etc/host.sh
编辑 DNSmasq 提供 DNS 缓存和 DHCP 服务
sudo nano /etc/dnsmasq.conf
追加内容如下
addn-hosts=/etc/dnsmasq.host # anti-AD 广告屏蔽(可选,未配置请删除)
listen-address=0.0.0.0, 127.0.0.1, 192.168.255.253 # 设置 DNS 缓存监听地址
port=53 # 指定 DNS 端口,用于 DHCP/TFTP
server=192.168.255.254 # 指定外网 DNS
interface=enp1s0 # 指定内网网口
dhcp-range=192.168.255.1,192.168.255.252,255.255.255.0,12h # 用于分配的起始/结束 IP,子网掩码,租期
dhcp-option=option:router,192.168.255.253 # 指定 DHCP 网关
enable-ra # 启用 Router Advertisements
dhcp-range=::,constructor:enp1s0,ra-only,slaac # 向局域网发送 RA,使用 slaac 分配地址,此处需注意网卡
no-resolv # 不要使用系统默认的 /etc/resolv.conf
resolv-file=/etc/resolv.dnsmasq.conf # 明确告诉它该去哪找上游 DNS
启用 DNSmasq 服务
重启 DNSmasq 服务
# 关闭 systemd-resolved,不然会因端口占用无法启动 DNSmasq
sudo systemctl stop systemd-resolved.service
sudo systemctl disable systemd-resolved.service
# 手动创建一个静态的上游 DNS 配置,例如
echo "nameserver 192.168.255.254" | sudo tee /etc/resolv.dnsmasq.conf
sudo ln -sfv /etc/resolv.dnsmasq.conf /etc/resolv.conf
# 启动 DNSmasq
sudo systemctl enable dnsmasq.service
sudo systemctl start dnsmasq.service
sudo systemctl status dnsmasq.service
配置防火墙 nftables 规则
sudo systemctl enable nftables
sudo systemctl status nftables
# 查看当前规则
sudo nft list ruleset
# 配置规则
sudo nano /etc/nftables.conf
配置内容如下,记得修改为自己的接口匹配规则比如 enp+ end+
#!/usr/sbin/nft -f
flush ruleset
# ===================== 防火墙规则 =====================
table inet filter {
chain input {
type filter hook input priority 0;
policy accept;
#policy drop;
# 放行 IPv6 基础通信
ip6 nexthdr icmpv6 accept
# 放行 IPv4 ping
ip protocol icmp accept
# 放行 loopback & 已建立连接
#iifname "lo" accept
#ct state established,related accept
# 放行必要端口(可按需调整)
#tcp dport { 22, 80, 443 } accept
#udp dport { 53, 443 } accept
# 拒绝日志(可限速)
#log prefix "nft input drop: " flags all limit rate 5/second counter
}
chain forward {
type filter hook forward priority 0;
policy accept;
#policy drop;
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
#ct state established,related accept
}
chain output {
type filter hook output priority 0;
policy accept;
#policy drop;
ip protocol icmp accept
ip6 nexthdr icmpv6 accept
}
}
# ===================== NAT IPv4 =====================
table ip nat {
chain postrouting {
type nat hook postrouting priority 100;
policy accept;
oifname "enp+" masquerade
oifname "ppp+" masquerade
oifname "end+" masquerade
}
}
# ===================== NAT IPv6 =====================
table inet nat {
chain postrouting {
type nat hook postrouting priority 100;
policy accept;
oifname "enp+" masquerade
oifname "ppp+" masquerade
oifname "end+" masquerade
}
}
检测配置并启动
# 检查语法
sudo nft -c -f /etc/nftables.conf
# 应用规则
sudo nft -f /etc/nftables.conf
# 查看当前状态
sudo nft list ruleset
wan 口插上拨号宽带网线,配置 PPPoE 拨号上网,按照提示输入宽带账号密码,剩下都是 yes 同意
sudo pppoeconf
编辑已经生成的 PPPoE 配置文件最后一行添加 ipv6 支持
sudo nano /etc/ppp/peers/dsl-provider
追加的内容如下
+ipv6
为下游设备分配 IPv6 编辑 /etc/wide-dhcpv6/dhcp6c.conf 并修改
想让 ppp0 和 end0 都作为可能的上游来源,可以写两个独立的 PD 块,像这样
如果只一个接口在线(比如拨号没建立),另一个照样能工作
sudo nano /etc/wide-dhcpv6/dhcp6c.conf
追加内容如下
interface ppp0 {
send ia-pd 0;
script "/etc/wide-dhcpv6/dhcp6c-script";
};
interface end0 {
send ia-pd 1;
script "/etc/wide-dhcpv6/dhcp6c-script";
};
id-assoc pd 0 {
prefix-interface enp1s0 {
sla-id 0;
ifid 1;
};
};
id-assoc pd 1 {
prefix-interface enp1s0 {
sla-id 1;
ifid 1;
};
};
创建自启动服务,最后重启linux,将网线从wan口切换到lan口,检查联网
注意修改为自己的网卡接口,比如 enp1s0 end0
cat << '469138946ba5fa' | sudo tee /etc/systemd/system/dhcp6c.service
[Unit]
Description=WIDE DHCPv6 Client
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/dhcp6c -f enp1s0 end0 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
469138946ba5fa
# 执行重启服务命令
sudo systemctl stop wide-dhcpv6-client.service
sudo systemctl disable wide-dhcpv6-client.service
sudo systemctl enable dhcp6c.service
sudo systemctl start dhcp6c.service
sudo systemctl status dhcp6c.service
# 重启电脑,完成路由设置
sudo reboot
# 将网线从wan口切换到lan口
主路由器中开启全局广播 DNS 和 GATEWAY
以防万一 nanopi r3s 的 dhcp 失效,在主路由器中开启全局广播 DNS 和 GATEWAY 替 nanopi r3s 分担 dhcp 的功能
配置内容如下
地址池开始地址 192.168.255.1
地址池结束地址 192.168.255.253
地址租期 120min
网关 192.168.255.253
首选DNS服务器 192.168.255.253
Comments
Post a Comment