[Linux软路由第二弹] - 5.设置PPPoE拨号和防火墙

1.设置PPPoE
在上一篇文章《 [Linux软路由第二弹] - 4.设置基础网络和系统参数 》中,Linux 路由器已经初步就绪,现在开始设置PPPoE拨号以及防火墙。
在上版构建 Linux 路由器的文章中,使用了 pppoeconf
工具来创建拨号配置。
但该工具已多年未更新,导致其设置 PPPoE 拨号的配置文件为 /etc/network/interfaces
。
这与当前使用 Systemd Network
进行网络配置的方式不太一致。
因此,本文以创建 systemd
服务的方式来进行 PPPoE 拨号。
1.1.创建拨号配置文件
PPPoE 拨号的主配置文件一般位于 /etc/ppp/peers
目录下。
配置文件名可自定义,演示值为 serverwan
。
使用 nano
编辑器创建 PPPoE拨号 配置文件,执行以下命令:
在编辑器对话框中输入以下内容,并保存。
注意:配置文件中 mtu
参数默认值为 1492
,这个参数与运营商相关,请根据实际情况进行调整。
PPPoE 拨号的密码配置文件一般位于 /etc/ppp
目录下。
使用 nano
编辑器编辑 PPPoE密码 配置文件,执行以下命令:
注意:如果拨号失败,可能运营商不支持 CHAP
加密认证,则尝试改用 PAP
认证:
在编辑器对话框中输入以下内容,并保存:
使用以下命令对密码配置文件的权限进行修正:
注意:当使用 PAP 认证时,则改用以下命令:
1.2.创建拨号服务
根据之前的内容,用于拨号的物理网口为 enp6s18
,拨号配置文件名为 serverwan
。
在创建 PPPoE systemd 拨号服务的过程中会用到这两个参数,请根据实际情况进行调整。
拨号服务命名规则:
pppd-<physical_port_name>@<pppoe_name>.service
因此本文中演示服务名为:
pppd-enp6s18@serverwan.service

使用
nano
编辑器创建 PPPoE服务 配置文件,执行以下命令:
在编辑器对话框中输入以下内容,并保存:
由于修改了服务项,需要使用以下命令进行重载:
使用以下命令让 PPPoE 拨号服务开机自启动:
由于现在防火墙暂未设置,不建议现在启动服务进行拨号,以避免安全隐患。
如果后续使用中,PPPoE 拨号服务出现异常,使用以下命令进行检查:
1.3.配置拨号接口
由于拨号服务可能意外退出,为了在服务重启后能再次拿到 IPv6 地址,需要对拨号接口进行调整。
使用 nano
编辑器创建 拨号接口 配置文件,执行以下命令:
在编辑器对话框中输入以下内容,并保存。
注意:cake
部分为 QoS 参数,请根据实际情况进行调整。
如果后续使用过程中,遇到系统启动缓慢,使用以下命令进行检查:
2.设置防火墙
在上版构建 Linux 路由器的文章中,使用了 iptables
进行防火墙配置,以及 iptables-restore
对防火墙进行持久化。
但 OpenWrt 从 22.03 版本开始,防火墙后端不再使用 iptables
,取而代之的是 nftables
。
当然,不仅 OpenWrt 有这样的变化,其他 Linux 发行版也有类似的情况,具体原因请查阅 Netfilter 官网相关信息。
因此,本文中防火墙配置工具同步变更为 nftables
,防火墙命令从 OpenWrt 22.03.2 版本中导出。
主要修改有:
默认启用
flowtable
,并对监听接口进行修改(OpenWrt 的flowtable
监听了端口pppoe-wan
)默认禁止外网 IPv4 / IPv6 对本机的 Echo Request
防火墙默认行为从
reject
变更为drop
定义了内网 DNS 服务器组,非组内 IP 的 DNS 请求将重定向到本机
访问光猫的网口与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 22.03 内核版本为 5.10.*
,Ubuntu Server 22.10 内核版本为 5.19.*
,因此将 PPPoE 拨号后生成的端口从 flowtable
中移除是个更好的选择,这样不仅能向前兼容,还能解决 nftables
服务与 PPPoE拨号 服务启动顺序带来的冲突。
配置防火墙之前,需要检查 nftables.service
服务状态,确保该服务开机自启动。
前文提过,服务状态为 enabled; preset: enabled
,表示该服务已开机自启动。
而当前服务实际状态为 disabled; preset: enabled
,则表示该服务并未开机自启动:
执行以下命令,将该服务设置为开机自启动:
nftables.service
启动时会自动加载 /etc/nftables.conf
配置文件 ,也就是防火墙的默认配置。
修改防火墙设置之前,使用以下命令将其备份:
使用 nano
编辑器创建 nftables
配置文件,执行以下命令:
注意:在应用防火墙配置之前请仔细阅读防火墙命令条目,并根据实际情况修改以下内容
访问光猫网口名称,演示值为:
enp6s18
flowtable
包含的网口,演示值为:enp6s18, enp6s19, enp6s20, enp6s21, enp6s22
网桥接口名称,演示值为:
bridge1
PPPoE 接口名称,演示值为:
pppoe-out1
内网 DNS 服务器组,除了本机地址(演示值为
172.16.1.1
、fd10::1
),其余均可自定义或移除
至此,服务器 PPPoE 拨号以及防火墙设置步骤完成。