在上一篇文章 03.Ubuntu_设置系统参数 中,已经设置了系统参数,现在开始设置系统网络。
由于网络设置中涉及网桥,需根据实际情况判断是否需要关闭 PVE 服务器内其他路由系统。
同样,请判断是否需要断开 Ubuntu Server 的上级物理路由器,并将 Ubuntu Server 连接光猫。
修改网络配置之前,需检查 systemd-networkd.service
服务状态,确保该服务开机自启。
若服务状态为 enabled; preset: enabled
,表示该服务已设置为开机自启。
## 检查 systemd-networkd.service
$ sudo systemctl status systemd-networkd.service
#### 系统 systemd-networkd.service 状态示例输出
● systemd-networkd.service - Network Configuration
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; preset: enabled)
若服务状态为 disabled; preset: enabled
,表示该服务暂未设置为开机自启。
## 检查 systemd-networkd.service
$ sudo systemctl status systemd-networkd.service
#### 系统 systemd-networkd.service 状态示例输出
○ systemd-networkd.service - Network Configuration
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; disabled; preset: enabled)
将 systemd-networkd.service
服务设置为开机自启,执行以下命令。
## 设置 systemd-networkd.service 开机自启
$ sudo systemctl enable systemd-networkd.service
Ubuntu Server 系统默认使用 netplan
进行网络设置,为了避免干扰,需移除相关配置文件:
-
netplan
默认网络配置文件 -
systemd-networkd
运行时网络配置文件
注意:一旦移除了网络相关配置文件,请不要重启系统,否则系统将无法通过网络访问。
## 移除 Netplan 配置文件
$ sudo rm -rvf /etc/netplan/*
## 移除 systemd 运行时网络配置文件
$ sudo rm -rvf /run/systemd/network/*
本机 systemd-networkd
配置文件一般在 /etc/systemd/network
目录下。
使用 neovim
编辑器创建 网桥设备 配置文件,执行以下命令。
## 创建 网桥设备 配置文件
$ sudo nvim /etc/systemd/network/25-bridge-device.netdev
在编辑器对话框中输入以下内容,并保存。
参数 | 值 | 说明 |
---|---|---|
Name | bridge1 |
网桥设备名称,可自定义,建议使用小写英文字符 |
Kind | bridge |
设备类型为网桥 |
# This configuration file is customized by fox,
# Optimize for bridge device.
[NetDev]
Name=bridge1
Kind=bridge
[Bridge]
STP=yes
设置网桥网络之前,需要对所使用的网络地址段进行规划,演示参数如下:
-
IPv4 地址(本机):
172.16.1.1
-
IPv4 子网掩码:
255.255.255.0
( 即/24
)
根据 RFC-4193 中给出的定义,IPv6 的私有地址 ULA 前缀为 FC00::/7
。
该前缀包含 FC00::/8
和 FD00::/8
两个部分,严格意义上 ULA 目前应该使用 FD00::/8
。
在实际使用场景下,建议使用类似 RFC4193 IPv6 Generator 的工具来生成符合规范的 ULA 地址。
该工具只需要输入接口(例如服务器的 bridge1
)的 MAC 地址即可。
当需启用 IPv6 ULA 地址时,请参考文件:fox_network_25_bridge_network_ula.network
使用 neovim
编辑器创建 网桥网络 配置文件,执行以下命令。
## 创建 网桥网络 配置文件
$ sudo nvim /etc/systemd/network/25-bridge-network.network
在编辑器对话框中输入以下内容,并保存。
参数 | 值 | 说明 |
---|---|---|
IPv6AcceptRA | no |
在网桥接口上不接收 RA (路由器通告) |
DHCPPrefixDelegation | yes |
在网桥接口上启用 PD (前缀委派) |
LinkLocalAddressing | ipv6 |
使用 IPv6 地址配置网桥 LLA (本地链路地址) |
Address | 172.16.1.1/24 |
给网桥接口分配的 IPv4 地址 |
RequiredForOnline | yes |
在线状态检测 |
注意:若需使用 QoS 参数,请参考以下文件。
-
Fq_CoDel
算法:fox_network_25_bridge_network_fq_codel.network
# This configuration file is customized by fox,
# Optimize for bridge network.
[Match]
Name=bridge1
[Network]
IPv6AcceptRA=no
DHCPPrefixDelegation=yes
LinkLocalAddressing=ipv6
[Address]
Address=172.16.1.1/24
[Link]
RequiredForOnline=yes
不同种类的网卡在 Ubuntu Server 中所使用的名称有所不同。
执行以下命令获取当前所有网卡信息。
## 获取网卡信息
$ cat /proc/net/dev
可见 Ubuntu Server 在 PVE 中设置为 q35
机型后,其 VirtIO
网卡均以 enp
开头。
#### 网卡信息示例输出
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 6368 84 0 0 0 0 0 0 6368 84 0 0 0 0 0 0
enp6s18: 266834 4110 0 19 0 0 0 0 47202 163 0 0 0 0 0 0
enp6s19: 1548869 8737 0 0 0 0 0 0 66283 494 0 0 0 0 0 0
enp6s20: 1515926 8372 0 0 0 0 0 0 10382 106 0 0 0 0 0 0
enp6s21: 1516028 8373 0 0 0 0 0 0 10382 106 0 0 0 0 0 0
其中 enp6s18
在本文中将作为 WAN 口连接光猫,因此网桥成员为其余网卡。
使用 neovim
编辑器创建 网桥成员 配置文件,执行以下命令。
## 创建 网桥成员 配置文件
$ sudo nvim /etc/systemd/network/25-bridge-ports.network
在编辑器对话框中输入以下内容,并保存。
# This configuration file is customized by fox,
# Optimize for bridge ports.
[Match]
Name=enp6s19
Name=enp6s20
Name=enp6s21
[Network]
Bridge=bridge1
本段回环接口设置主要为了安全加固,为可选设置项。
使用 neovim
编辑器创建 回环接口 配置文件,执行以下命令。
## 创建 回环接口 配置文件
$ sudo nvim /etc/systemd/network/50-lo.network
由于回环接口的配置文件很长,因此请查阅文件 fox_network_50_lo.network 进行复制。
一般情况下,路由器进行 PPPoE 拨号后,光猫将无法访问。
为了访问光猫,需要给连接光猫的网口 enp6s18
增加一个与光猫同网段的静态 IPv4 地址。
演示地址为 192.168.1.2/24
。
注意:给网口添加静态 IPv4 地址时,不要添加默认路由。
使用 neovim
编辑器创建 光猫访问 配置文件,执行以下命令。
## 创建 静态IPv4 配置文件
$ sudo nvim /etc/systemd/network/50-static-onu.network
在编辑器对话框中输入以下内容,并保存。
# This configuration file is customized by fox,
# Optimize for ONU access.
[Match]
Name=enp6s18
[Network]
LinkLocalAddressing=no
[Address]
Address=192.168.1.2/24
[Link]
RequiredForOnline=no
在上版构建 Linux 路由器的文章中,使用了 pppoeconf
工具来创建拨号配置。
但该工具已多年未更新,导致其设置 PPPoE 拨号的配置文件为 /etc/network/interfaces
。
这与当前使用 Systemd Network
进行网络配置的方式不太一致。
因此,这次以创建 systemd
服务的方式来进行 PPPoE 拨号。
PPPoE 拨号的主配置文件一般位于 /etc/ppp/peers
目录下。
配置文件名可自定义,演示值为 pppoe1
。
使用 neovim
编辑器创建 PPPoE 拨号 配置文件,执行以下命令。
## 创建 PPPoE拨号 配置文件
$ sudo nvim /etc/ppp/peers/pppoe1
在编辑器对话框中输入以下内容,并保存。
注意:配置文件中 mtu
参数默认值为 1492
,该参数与运营商相关,请根据实际情况进行调整。
# This configuration file is customized by fox,
# Optimize PPPoE parameters for Linux Router.
#
# The mtu parameter is optional,
# default is 1492.
#
# eg:
# mtu 1492
#
# If IPv6 is missing,
# try to add IPv6 related parameters.
#
# eg:
# +ipv6
#
# Set PPPoE user name
user "<your_pppoe_user_name>"
# Always retry on failure
maxfail 0
# Always replaces an existing default route
defaultroute
replacedefaultroute
# Other adjustable parameters
default-asyncmap
hide-password
lcp-echo-interval 0
lcp-echo-failure 5
noaccomp
noauth
noipdefault
noproxyarp
persist
PPPoE 拨号的密码配置文件一般位于 /etc/ppp
目录下。
使用 neovim
编辑器编辑 PPPoE 密码 配置文件,执行以下命令。
## 编辑 CHAP 认证 PPPoE密码 配置文件
$ sudo nvim /etc/ppp/chap-secrets
## 如果拨号失败,可能运营商不支持 CHAP 加密认证,则尝试改用 PAP 认证
## 编辑 PAP 认证 PPPoE密码 配置文件
$ sudo nvim /etc/ppp/pap-secrets
在编辑器对话框中输入以下内容,并保存。
# This configuration file is customized by fox,
# Optimize PPPoE user and password.
#
# Secrets for authentication using CHAP/PAP
# client server secret IP addresses
"<your_pppoe_user_name>" * "<your_pppoe_user_password>"
执行以下命令对密码配置文件的权限进行修正。
## 修正 CHAP 认证文件权限
$ sudo chmod 600 /etc/ppp/chap-secrets
## 当使用 PAP 认证时,则改用以下命令修正 PAP 认证文件权限
$ sudo chmod 600 /etc/ppp/pap-secrets
由于拨号服务可能意外退出,为了在服务重启后能再次拿到 IPv6 地址,需要对拨号接口进行调整。
使用 neovim
编辑器创建 拨号网络 配置文件,执行以下命令。
## 创建 拨号网络 配置文件
$ sudo nvim /etc/systemd/network/75-pppoe.network
在编辑器对话框中输入以下内容,并保存。
额外说明:
-
[Match]
中Name
参数需要与 PPPoE 拨号配置文件的文件名相同。 -
若需使用 QoS 参数,请参考以下文件。
-
Fq_CoDel
算法:fox_network_75_pppoe_fq_codel.network
# This configuration file is customized by fox,
# Optimize for PPPoE dialing.
[Match]
Name=pppoe1
Type=ppp
[Network]
IPv6AcceptRA=yes
LLMNR=no
[IPv6AcceptRA]
DHCPv6Client=always
UseDNS=no
UseDomains=no
[DHCPv6]
RapidCommit=yes
UseDNS=no
UseNTP=no
UseDomains=no
[Link]
RequiredForOnline=yes
根据前文,用于拨号的物理网口为 enp6s18
,拨号配置文件名为 pppoe1
,拨号成功后网络设备名为 pppoe1
。
在创建 PPPoE 拨号服务的过程中会用到这 3
个参数,请根据实际情况进行调整。
拨号服务命名规则:pppd-<physical_port_name>@<pppoe_name>.service
因此本文中演示服务名为:[email protected]
参数 | 值 | 说明 |
---|---|---|
physical_port_name |
enp6s18 |
用于拨号的物理网口的名称 |
pppoe_name |
pppoe1 |
PPPoE 拨号的配置文件的名称 |
使用 neovim
编辑器创建 PPPoE 服务 配置文件,执行以下命令。
## 创建 PPPoE服务 配置文件
$ sudo nvim /etc/systemd/system/[email protected]
在编辑器对话框中输入以下内容,并保存。
# This configuration file is customized by fox,
# Optimize for PPPoE systemd service.
[Unit]
Description=PPP connection for %I
Documentation=man:pppd(8)
BindsTo=sys-subsystem-net-devices-%j.device
After=sys-subsystem-net-devices-%j.device
After=network.target
Before=default.target
[Service]
Type=notify
ExecStartPre=/lib/systemd/systemd-networkd-wait-online -i %J -o carrier
ExecStart=/usr/sbin/pppd plugin rp-pppoe.so %J call %I linkname %I ifname %I up_sdnotify
ExecStop=/bin/kill $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=null
Restart=always
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=strict
ReadWritePaths=/run/ /etc/ppp/
ProtectControlGroups=yes
SystemCallFilter=~@mount
SystemCallArchitectures=native
LockPersonality=yes
MemoryDenyWriteExecute=yes
RestrictRealtime=yes
[Install]
WantedBy=sys-devices-virtual-net-%i.device
WantedBy=default.target
由于修改了服务项,需要执行以下命令进行重载。
## 服务重载
$ sudo systemctl daemon-reload
执行以下命令让 PPPoE 拨号服务开机自启。
## 设置 PPPoE 拨号服务开机自启
$ sudo systemctl enable [email protected]
由于现在防火墙暂未设置,不建议现在启动服务进行拨号,以避免安全隐患。
如果后续使用中,PPPoE 拨号服务出现异常,执行以下命令进行检查。
## 检查 PPPoE 拨号服务
$ sudo journalctl -eu [email protected]
## 查看系统启动时间分布
$ sudo systemd-analyze blame
## 检查导致启动缓慢的服务
$ sudo systemd-analyze critical-chain systemd-networkd-wait-online.service
## 检查网络配置情况
$ sudo networkctl status -a
本步骤为可选操作,主要用于设置定时重新拨号或重启服务器。
修改系统定时任务配置之前,需检查 cron.service
服务状态,确保该服务开机自启。
## 检查 cron.service
$ sudo systemctl status cron.service
## 设置 cron.service 开机自启
$ sudo systemctl enable cron.service
执行以下命令来编辑系统定时任务。
## 查看系统定时任务
$ sudo crontab -l
## 编辑系统定时任务,编辑器选择 nano
$ sudo crontab -e
在配置文件末尾,增加以下配置项。
## 定时任务配置项
## 每 3 天 PPPoE 重新拨号
0 4 */3 * * /usr/bin/systemctl restart [email protected]
## 定时重启系统
0 3 8,24 * * /usr/sbin/reboot
本步骤为可选操作,内容为关闭网络接口的硬件卸载(Offload)。
使用 neovim
编辑器创建 硬件卸载 配置文件,执行以下命令。
## 创建 硬件卸载 配置文件
$ sudo nvim /etc/systemd/network/90-offload.link
在编辑器对话框中输入以下内容,并保存。
注意:配置文件中 OriginalName
参数为 enp*
,该参数与网卡名称相关,请根据实际情况进行调整。
# This configuration file is customized by fox,
# Optimize for nic offload.
[Match]
OriginalName=enp*
[Link]
GenericSegmentationOffload=no
GenericReceiveOffload=no
TCPSegmentationOffload=no
TCP6SegmentationOffload=no
LargeReceiveOffload=no
修改防火墙配置之前,需检查 nftables.service
和 sshguard.service
服务状态,确保该服务开机自启。
## 检查 nftables.service
$ sudo systemctl status nftables.service
## 设置 nftables.service 开机自启
$ sudo systemctl enable nftables.service
## 检查 sshguard.service
$ sudo systemctl status sshguard.service
## 设置 sshguard.service 开机自启
$ sudo systemctl enable sshguard.service
在上版构建 Linux 路由器的文章中,使用了 iptables
进行防火墙配置,以及 iptables-restore
对防火墙进行持久化。
但 OpenWrt 从 22.03 版本开始,防火墙后端不再使用 iptables
,取而代之的是 nftables
。
当然,不仅 OpenWrt 有这样的变化,其他 Linux 发行版也有类似的情况,具体原因请查阅 Netfilter 官网相关信息。
因此,本文中防火墙配置工具同步变更为 nftables
,防火墙命令从 OpenWrt 23.05.0 版本中导出。
主要修改有:
-
默认启用
flowtable
,并对监听接口进行修改(OpenWrt 的flowtable
监听了端口pppoe-wan
) -
默认禁止外网 IPv4 / IPv6 对本机的
Echo Request
-
防火墙默认行为从
reject
变更为drop
-
已配置内网 DNS 服务器组规则(
NFTsets
),将非组内 IP 的 DNS 请求重定向至本机- 对内网 DNS 服务器组的 IPv6 地址,使用后缀匹配模式进行额外处理
-
访问光猫的网口与PPPoE接口共享防火墙策略,简化防火墙命令
根据内核相关文档 Netfilter’s flowtable infrastructure 中的描述:
Since Linux kernel 5.13, the flowtable infrastructure discovers the real netdevice behind VLAN and PPPoE netdevices. The flowtable software datapath parses the VLAN and PPPoE layer 2 headers to extract the ethertype and the VLAN ID / PPPoE session ID which are used for the flowtable lookups. The flowtable datapath also deals with layer 2 decapsulation.
You do not need to add the PPPoE and the VLAN devices to your flowtable, instead the real device is sufficient for the flowtable to track your flows.
考虑到 OpenWrt 23.05 内核版本为 5.15.*
,Ubuntu Server 24.04 内核版本为 6.8.*
,因此将 PPPoE 拨号后生成的端口从 flowtable
中移除是个更好的选择,这样不仅能向前兼容,还能解决 nftables
服务与 PPPoE 拨号服务启动顺序带来的冲突。
nftables.service
启动时会自动加载 /etc/nftables.conf
配置文件 ,也就是防火墙的默认配置。
修改防火墙设置之前,执行以下命令将其备份。
## 备份 nftables 配置文件
$ sudo mv /etc/nftables.conf /etc/nftables.conf.bak
注意:在应用防火墙配置之前请仔细阅读防火墙配置文件,并根据实际情况修改以下内容。
-
访问光猫网口名称,演示值为:
enp6s18
-
flowtable
包含的网口,演示值为:enp6s18, enp6s19, enp6s20, enp6s21
-
网桥接口名称,演示值为:
bridge1
-
PPPoE 接口名称,演示值为:
pppoe1
-
内网 DNS 服务器组,可自定义或移除
使用 neovim
编辑器创建 nftables
配置文件,执行以下命令。
## 创建新的 nftables 配置文件
$ sudo nvim /etc/nftables.conf
由于防火墙配置文件很长,因此请查阅文件 fox_firewall_nftables.conf 进行复制。
修改 Dnsmasq
配置之前,需检查 dnsmasq.service
服务状态,确保该服务开机自启。
如果看到 dnsmasq.service
服务报错,是因为当前服务暂未配置,无需担心。
## 检查 dnsmasq.service
$ sudo systemctl status dnsmasq.service
## 设置 dnsmasq.service 开机自启
$ sudo systemctl enable dnsmasq.service
Dnsmasq
的主配置文件一般位于 /etc
目录下,但修改主配置文件之前,需要做几步额外操作。
一般情况下,Dnsmasq
只需单个配置文件即可完成配置,本文中拆分配置文件主要是为了方便维护。
说明:以下配置内容参考了 OpenWrt 的相关设置,可根据实际需求进行调整。
文件名 | 路径 | 说明 |
---|---|---|
dhcpbogushostname.conf |
/usr/share/dnsmasq |
不会进行 DHCP 分配的虚假主机名列表 |
rfc6761.conf |
/usr/share/dnsmasq |
不会转发到上游 DNS 服务器进行查询的域名列表 |
dnsmasq.staticv4.conf |
/etc/dnsmasq.d |
内网 IPv4 静态地址绑定配置文件 |
dnsmasq.dnssvr.conf |
/etc/dnsmasq.d |
上游 DNS 服务器配置文件 |
dnsmasq.conf |
/etc |
dnsmasq 主配置文件 |
使用 neovim
编辑器创建 dhcpbogushostname.conf
配置文件,执行以下命令。
## 创建 dhcpbogushostname 配置文件
$ sudo nvim /usr/share/dnsmasq/dhcpbogushostname.conf
在编辑器对话框中输入以下内容,并保存。
# This configuration file is customized by OpenWrt
#
# dhcpbogushostname.conf included configuration file for dnsmasq
#
# includes a list of hostnames that should not be associated with dhcp leases
# in response to CERT VU#598349
#
# file included by default, option dhcpbogushostname 0 to disable
dhcp-name-match=set:dhcp_bogus_hostname,localhost
dhcp-name-match=set:dhcp_bogus_hostname,wpad
使用 neovim
编辑器创建 rfc6761.conf
配置文件,执行以下命令。
## 创建 rfc6761 配置文件
$ sudo nvim /usr/share/dnsmasq/rfc6761.conf
在编辑器对话框中输入以下内容,并保存。
# This configuration file is derived from OpenWrt
#
# RFC6761 included configuration file for dnsmasq
#
# includes a list of domains that should not be forwarded to Internet name servers
# to reduce burden on them, asking questions that they won't know the answer to
server=/alt/
server=/bind/
server=/example/
server=/home.arpa/
server=/internal/
server=/invalid/
server=/lan/
server=/local/
server=/localhost/
server=/onion/
server=/test/
使用 neovim
编辑器创建 IPv4 静态地址绑定 配置文件,执行以下命令。
## 创建 静态地址绑定 配置文件
$ sudo nvim /etc/dnsmasq.d/dnsmasq.staticv4.conf
在编辑器对话框中输入以下内容,并保存。
注意:当前该配置文件中静态绑定项为空,具体绑定方法参见配置文件中的示例。
# This configuration file is customized by fox,
# Optimize dnsmasq parameters for Linux Router.
#
# eg:
# dhcp-host=00:0c:29:f4:27:c1,172.16.10.201,foxmachine-1,2h
# dhcp-host=00:0c:29:f4:27:c2,172.16.10.202,foxmachine-2,2d,set:dnsv4ha
# dhcp-host=00:0c:29:f4:27:c3,172.16.10.203,foxmachine-3,1w,set:gwpass,set:dnspass
使用 neovim
编辑器创建 上游 DNS 服务器 配置文件,执行以下命令。
## 创建 上游DNS服务器 配置文件
$ sudo nvim /etc/dnsmasq.d/dnsmasq.dnssvr.conf
在编辑器对话框中输入以下内容,并保存。
# This configuration file is customized by fox,
# Optimize dnsmasq parameters for Linux Router.
#
# For use DNS server deployed in other virtual machines,
# please modify 'server' parameter according to
# your network environment.
#
# eg:
# server=172.16.1.2
# server=172.16.1.3
# server=fdac::2
# server=fdac::3
# server=127.0.0.1#6053
# server=::1#6053
server=223.5.5.5
server=180.184.1.1
server=119.29.29.29
server=2402:4e00::
server=2400:3200::1
修改 Dnsmasq
主配置文件之前,执行以下命令将其备份。
## 备份 Dnsmasq 主配置文件
$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
使用 neovim
编辑器创建 Dnsmasq
主配置文件,执行以下命令。
## 创建 Dnsmasq 主配置文件
$ sudo nvim /etc/dnsmasq.conf
在编辑器对话框中输入以下内容,并保存。
额外说明:
-
请根据系统内存使用情况,调整缓存参数
cache-size
-
配置文件中内网域名为
fox.internal
,请根据实际情况进行调整 -
请检查配置文件中 DHCP 服务器相关配置项,并根据实际情况进行调整
# This configuration file is customized by fox,
# Optimize dnsmasq parameters for Linux Router.
#
# For use other DNS software like Adguard Home or SmartDNS,
# please set 'port' to zero to disables DNS function,
# leaving only DHCP and/or TFTP.
#
# eg:
# port=0
#
# For use DNS server deployed in other virtual machines,
# please modify 'dhcp-option' parameter according to
# your network environment.
#
# eg:
# dhcp-option=tag:dnsv4,6,172.16.1.2,172.16.1.3
# dhcp-option=tag:dnsv4ha,6,172.16.1.1
# dhcp-option=tag:dnsv6,option6:dns-server,[fdac::2],[fdac::3]
#
# For use a bypass router deployed in another virtual machine,
# please modify 'dhcp-option' parameter according to
# your network environment.
#
# eg:
# dhcp-option=tag:gwpass,3,172.16.1.5
# dhcp-option=tag:dnspass,6,172.16.1.5
# Main Config
conf-dir=/etc/dnsmasq.d/,*.conf
conf-file=/etc/dnsmasq.conf
conf-file=/usr/share/dnsmasq/dhcpbogushostname.conf
conf-file=/usr/share/dnsmasq/rfc6761.conf
log-facility=/var/log/dnsmasq.log
log-async=20
cache-size=2048
max-cache-ttl=7200
fast-dns-retry=1800
interface=bridge1
ra-param=bridge1,900,2700
domain=fox.internal
local=/fox.internal/
bind-dynamic
bogus-priv
dhcp-authoritative
dhcp-rapid-commit
domain-needed
enable-ra
local-service
log-dhcp
no-hosts
no-negcache
no-resolv
no-round-robin
rebind-localhost-ok
stop-dns-rebind
strip-subnet
# DHCP Server Config
dhcp-broadcast=tag:needs-broadcast
dhcp-ignore-names=tag:dhcp_bogus_hostname
dhcp-leasefile=/var/lib/misc/dnsmasq.leases
dhcp-range=set:dnsv4,172.16.1.100,172.16.1.200,255.255.255.0,1d
dhcp-range=set:dnsv6,::,constructor:bridge1,slaac,45m
dhcp-option=tag:dnsv4,6,172.16.1.1
dhcp-option=tag:dnsv6,option6:dns-server
若需使用 SmartDNS
优化系统 DNS 请求,则更推荐将 SmartDNS
设置为 Dnsmasq
的上游 DNS 服务器。
SmartDNS
可使用 Debian 官方源进行安装,但其版本通常较为 “过时” 。
因此,更推荐使用其 Github 仓库中的最新稳定版进行安装,官方仓库请参阅 pymumu/smartdns 。
下载 SmartDNS
最新版本时,请根据系统架构选择合适的版本,执行以下命令。
## 创建存放 SmartDNS 安装包的临时目录
$ mkdir -p /tmp/SmartDNS
## 进入目录
$ cd /tmp/SmartDNS
## 下载 SmartDNS 安装包
$ curl -LR -O https://github.com/pymumu/smartdns/releases/download/Release46/smartdns.1.2024.06.12-2222.x86_64-linux-all.tar.gz
## 解压缩 SmartDNS 安装包
$ tar zxf smartdns.1.2024.06.12-2222.x86_64-linux-all.tar.gz
## 进入安装包目录
$ cd smartdns
## 设置脚本可执行权限
$ chmod +x ./install
## 安装 SmartDNS
$ sudo ./install -i
修改 SmartDNS
配置之前,需检查 smartdns.service
服务状态,确保该服务开机自启。
## 检查 smartdns.service
$ sudo systemctl status smartdns.service
## 设置 smartdns.service 开机自启
$ sudo systemctl enable smartdns.service
本步骤为可选操作,通过安装 SmartDNS
附加配置文件,以达到屏蔽广告或加速中国境内域名解析速度的目的。
若需使用 SmartDNS
屏蔽广告,则需下载广告规则配置文件。
## 创建 SmartDNS 配置文件目录
$ sudo mkdir -p /etc/smartdns.d
## 下载广告规则配置文件
$ sudo curl -LR -o /etc/smartdns.d/neodevhost.smartdns.conf https://neodev.team/lite_smartdns.conf
SmartDNS
的加速规则通过 bash
脚本安装,脚本生成的配置文件位于 /etc/smartdns.d
目录。
关于脚本的详细介绍,请参阅 SmartDNS China List 安装脚本 。
## 下载加速规则安装脚本
$ sudo curl -LR -o /opt/smartdns-plugin.sh https://gitee.com/callmer/smartdns_china_list_installer/raw/main/smartdns_plugin.sh
## 设置脚本可执行权限
$ sudo chmod +x /opt/smartdns-plugin.sh
## 设置脚本文件防篡改
$ sudo chattr +i /opt/smartdns-plugin.sh
## 执行脚本
$ sudo bash /opt/smartdns-plugin.sh
本步骤为可选操作,主要用于设置 SmartDNS
定时更新附加配置文件和定时重启。
## 编辑系统定时任务,编辑器选择 nano
$ sudo crontab -e
在配置文件末尾,增加以下配置项。
## 定时任务配置项
20 9 * * * /usr/bin/curl --retry-connrefused --retry 5 --retry-delay 5 --retry-max-time 60 -fsSLR -o /etc/smartdns.d/neodevhost.smartdns.conf https://neodev.team/lite_smartdns.conf
30 9 * * * /usr/bin/systemctl restart smartdns.service
若使用了 SmartDNS
加速规则的安装脚本,由于脚本自带服务重启功能,因此定时任务可修改如下。
## 定时任务配置项
20 9 * * * /usr/bin/curl --retry-connrefused --retry 5 --retry-delay 5 --retry-max-time 60 -fsSLR -o /etc/smartdns.d/neodevhost.smartdns.conf https://neodev.team/lite_smartdns.conf
30 9 * * * /usr/bin/bash /opt/smartdns-plugin.sh
SmartDNS
配置较为复杂,可按需制定各类 DNS 请求规则,建议先查阅官方提供的 配置指导 和 配置选项 。
修改 SmartDNS
主配置文件之前,建议关闭 SmartDNS
并清理 DNS 缓存文件。
## 关闭 smartdns.service
$ sudo systemctl stop smartdns.service
## 清理进程标识文件
$ sudo rm -rvf /var/run/smartdns.pid /run/smartdns.pid
SmartDNS
的主配置文件一般位于 /etc/smartdns
目录下,修改配置文件之前,执行以下命令将其备份。
## 备份 SmartDNS 主配置文件
$ sudo mv /etc/smartdns/smartdns.conf /etc/smartdns/smartdns.conf.bak
使用 neovim
编辑器创建 SmartDNS
主配置文件,执行以下命令。
## 创建 SmartDNS 主配置文件
$ sudo nvim /etc/smartdns/smartdns.conf
在编辑器对话框中输入以下内容,并保存。
额外说明:
-
SmartDNS
端口监听参数为6053@lo
,请根据实际情况进行调整 -
检查配置文件中关于本地域名及其上游 DNS 服务器相关配置,请根据实际情况进行调整
# This configuration file is customized by fox,
# Optimize SmartDNS parameters for Linux Router.
#
# For use common DNS server as upstream DNS server,
# please modify 'server' parameter according to
# your network environment.
#
# eg:
# server 223.5.5.5
# server 180.184.1.1
# server 119.29.29.29
# server 114.114.114.114
# server 2402:4e00::
# server 2400:3200::1
conf-file /etc/smartdns.d/*.conf
log-level notice
bind [::]:6053@lo
bind-tcp [::]:6053@lo
cache-size 32768
max-query-limit 1024
max-reply-ip-num 24
prefetch-domain yes
serve-expired yes
serve-expired-ttl 129600
serve-expired-reply-ttl 30
serve-expired-prefetch-time 28800
rr-ttl-min 60
rr-ttl-max 28800
rr-ttl-reply-max 14400
server 172.16.1.1 -group intranet -exclude-default-group
nameserver /internal/intranet
domain-rules /internal/ -speed-check-mode none -no-cache
server-tcp 180.184.2.2 -bootstrap-dns
server-tcp 114.114.115.115 -bootstrap-dns
server-tcp 2400:3200:baba::1 -bootstrap-dns
server-tcp 2400:7fc0:849e:200::4 -bootstrap-dns
server-tls dot.pub
server-tls dns.alidns.com
server-https https://doh.pub/dns-query
server-https https://dns.alidns.com/dns-query
需修改 Dnsmasq
的上游 DNS 服务器配置文件,将 SmartDNS
设置为上游 DNS 服务器。
使用 neovim
编辑器编辑 Dnsmasq
上游 DNS 服务器配置文件,执行以下命令。
## 编辑 上游DNS服务器 配置文件
$ sudo nvim /etc/dnsmasq.d/dnsmasq.dnssvr.conf
在编辑器对话框中修改 server
参数,并保存。
# This configuration file is customized by fox,
# Optimize dnsmasq parameters for Linux Router.
#
# For use DNS server deployed in other virtual machines,
# please modify 'server' parameter according to
# your network environment.
#
# eg:
# server=172.16.1.2
# server=172.16.1.3
# server=fdac::2
# server=fdac::3
# server=127.0.0.1#6053
# server=::1#6053
server=127.0.0.1#6053
server=::1#6053
Ubuntu Server 默认使用 systemd-resolved.service
服务,需将其禁用来避免 53
端口被占用。
停止并禁用 systemd-resolved.service
服务,执行以下命令。
## 停止 systemd-resolved.service
$ sudo systemctl disable --now systemd-resolved.service
## 禁用 systemd-resolved.service
$ sudo systemctl mask systemd-resolved.service
移除系统当前使用的 DNS 配置文件。
## 移除 DNS 配置文件
$ sudo rm -rvf /etc/resolv.conf
使用 neovim
编辑器创建 DNS 配置文件,执行以下命令。
## 创建新的 DNS 配置文件
$ sudo nvim /etc/resolv.conf
在编辑器对话框中输入以下内容,并保存。
注意:其中 search
参数为本地域名,请根据实际情况进行调整。
# This configuration file is customized by fox,
# Optimize system resolve parameters for Linux Router.
#
# For use local domain,
# please modify 'search' parameter according to
# your network environment.
#
# eg:
# search fox.internal
nameserver 127.0.0.1
nameserver ::1
options edns0 timeout:1 trust-ad
search fox.internal
为了防止系统中其他服务意外修改 DNS 配置文件,需要修改配置文件的权限。
## DNS 配置文件防篡改
$ sudo chattr +i /etc/resolv.conf
执行以下命令检查权限是否修改成功。
## 检查 DNS 配置文件权限
$ lsattr /etc/resolv.conf
#### 示例输出
----i----------------- /etc/resolv.conf
至此,Ubuntu 服务器设置系统网络步骤完成。