介绍

  • 本文所讨论的环境是光猫走桥接,然后在软路由设备上进行拨号连接网络,其他场景不讨论
  • 本文全部使用的UFW防火墙,如果使用其他防火墙,务必确保配置正确
  • 后文讨论的路由器配置基本都是通用内容,可能设置的位置描述有差异,灵活参考配置即可

网络拓扑

整个网络拓扑如图所示:

这里的软路由设备由单独的一个小主机使用Ubuntu server24系统进行搭建,
如果路由器支持二开,也可以使用路由器安装对应的路由系统搭建。不过不在本文讨论范围

光猫配置

因为需要用软路由设备进行拨号,所以光猫必须配置为封装PPPoE的桥接模式,默认是路由模式,拨号由光猫完成
可以关闭光猫的dhcp功能
所有操作均需要超级管理员账号和密码
具体操作可以网络搜索关键字:“修改光猫为桥接”,本文不讨论具体方法

软路由部署

  • 首先是先有🐔还是现有🥚的问题,因为需要用软路由拨号,在拨号前是没有网络的,所以软件安装需要在其他网络环境下操作!
  • 这里可以先在光猫上设置拨号连接,然后等设备软件安装完成后再切换为桥接
  • 在设备上安装好Ubuntu操作系统,本文使用Ubuntu server24.04版本搭建
  • 其次将光猫过来的网线接入对应网口,再从另一个网口接后续设备,我这里接的是路由器

网口配置

这次使用的小主机具有多个网口,一个作为wan口,其他全部做lan口,在软件层组合成一个虚拟口使用

网络配置需要注意:
光猫网段(一般是192.168.1.0/24)、软路由网段、路由器网段(一般是192.168.0.0/24)不要设置成相同网段

配置文件:/etc/netplan/50-cloud-init.yaml

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
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
dhcp6: false
enp2s0:
dhcp4: false
dhcp6: false
enp3s0:
dhcp4: false
dhcp6: false
enp4s0:
dhcp4: false
dhcp6: false
bridges:
br10:
interfaces: [ enp1s0,enp2s0,enp3s0,enp4s0 ]
dhcp4: false
addresses:
- 192.168.2.2/24
nameservers:
addresses: [192.168.2.2]
routes:
- to: 192.168.0.0/24

配置文件中的 routes 是额外配置的下一级路由器的网段路由,这点要注意

接线:和路由器接线方法相同

  • 首先运营商光纤经过光猫设备转网口
  • 软路由设备wan口对接运营商网络,也就是光猫出来后接该口
  • 软路由设备lan口对接后续设备,这里后续设备就是路由器

sysctl参数配置

要让Linux设备成为路由设备,需要开启报文转发,由系统参数决定
将这些配置写到cat /etc/sysctl.conf文件末尾,然后执行sysctl -p命令生效!我这里还修改了TCP的参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# forward
net.ipv4.ip_forward = 1
net.ipv4.conf.all.forwarding = 1
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.all.route_localnet = 1

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

# TCP
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

pppoe拨号

  • 安装软件
    拨号使用pppoeconf软件,需要在其他网络环境下提前安装
    1
    2
    apt update
    apt install -y pppd pppoeconf
  • 打开ipv6
    默认拨号只获取IPV4,需要在配置文件中打开IPV6,执行该命令打开
    1
    echo "+ipv6" >> /etc/ppp/options
  • 配置
    执行pppoeconf命令,然后它会自动寻找接了运营商的网口进行配置
    根据提示输入宽带账户和密码,不懂的内容默认就行

配置完成后,如果用户名和密码无误,则会自动拉起,此时ip a可以看到对应网口上已经获取到了ip地址

相关命令:

  • pon: 开始拨号,后面需要跟配置文件。默认生成的配置文件在/etc/ppp/peers/目录下
    我这里是pon dsl-provider
  • poff: 关闭拨号连接
  • plog: 显示日志

ipv6 dhcp配置

拨号完成后可以看到wan口ppp0上已经获取到了ipv6地址,但是lan口br10上是没有的。
给内网设备也分配对应的IPv6地址使用Prefix delegation(前缀代理),简称PD。
向上级路由发送PD请求,可以获取一个小于等于64长度的网段,然后就可以给内网分配可以使用的ipv6地址

通过wide-dhcpv6-client申请PD

安装:apt install -y wide-dhcpv6-client
然后在配置文件/etc/wide-dhcpv6/dhcp6c.conf中添加:

1
2
3
4
5
6
7
8
9
10
interface ppp0 {
send ia-pd 0;
};

id-assoc pd 0 {
# use the interface connected to your LAN
prefix-interface br10 {
sla-id 1;
};
};

ppp0就是pppoe创建的wan
br10则是前面创建的lan

配置完成后重启服务生效:systemctl restart wide-dhcpv6-client,此时就可以看到br10口上配置了ipv6地址

通过dnsmasq给下级分配IPV6地址

下级网络设备,本文组网情况下的路由器设备此时还无法获取IPV6
此时需要向下级设备发送RA,使用SLAAC来分配ipv6地址,这里使用dnsmasq服务完成

安装:apt install -y dnsmasq
然后在配置文件/etc/wide-dhcpv6/dhcp6c.conf中添加:

1
2
3
enable-ra
dhcp-range=::,constructor:br10,ra-only,slaac
dhcp-option=option6:dns-server,[2400:3200::1],[2400:3200:baba::1]

br10是前面创建的lan
ipv6的DNS这里配置的是阿里的DNS
这里只使用dnsmasq的RA功能,其他比如dns功能均不使用

配置完成后重启服务生效:systemctl restart dnsmasq

打开防火墙

在网络上裸奔是很危险的,这里使用Ubuntu自带的防火墙管理工具UFW
基础的ufw配置放通端口这里不讨论,网络上资料一堆,初次使用前先去看一看
这里列举相关的配置:

  • 修改默认转发策略
    在配置文件中/etc/default/ufw修改DEFAULT_FORWARD_POLICY参数为ACCEPT
  • 放通使用的端口
    比如ssh的22端口ufw allow 22
    DNS和DHCP相关的端口(53,67和ipv6-icmp)等,在UFW中默认都是放通的,所以不需要额外配置

接着打开防火墙即可

1
2
3
4
5
# 打开防火墙
ufw enable

# 查看防火墙状态
ufw status

路由器配置

  • 软路由上没有配置ipv4的DHCP服务,所以路由器接入后获取不到IP地址
  • 软路由配置了ipv6的DHCP服务,所以路由器接入后可以获取到IPV6地址

上网方式

上网方式配置成固定IP,然后设置和软路由相同网段的ip即可(如果你觉得这句话和本文开始的内容冲突,说明你没有理解)
举例:

1
2
3
4
IP地址:192.168.2.5     # 新的ip地址,设置路由器WAN口的地址
子网掩码:255.255.255.0
网关地址:192.168.2.2 # 软路由LAN口配置的地址
首选DNS:192.168.2.2

如果路由器支持自动选择WAN口的功能,最好关掉,在这种配置下最好关闭,选择固定WAN口

LAN口和ipv4的DHCP

设置模式为手动,然后设置路由器的LAN口ip和子网掩码
设置开启ipv4的DHCP服务器,以便给连接路由器的设备分配地址

这里注意本文开头所说,网段不要设置成和软路由相同的网段!

ipv6设置

因为软路由上存在ipv6的DHCP,所以路由器上的ipv6地址获取选择成自动即可

一些小问题

运营商断网后是否会重试

运营商网络断开后,pppd会进行重试操作,每隔1分钟重试一次,一共10次,之后会退出
pppd退出后需要再次执行pon dsl-provider打开

开机等待网络服务耗时长

开机系统服务默认等待网络,这个过程耗时非常久!
可以修改相关服务文件添加超时时间
编辑/usr/lib/systemd/system/systemd-networkd-wait-online.service文件
[Service]段落最后添加一行TimeoutStartSec=2s
让其等待2s后就超时通过即可,下次重启速度就会好很多!

ipv6地址租期过期后不会自动续租

当前的解决方法是用脚本定时检查br10口上的ipv6地址是否还在
如果过期不在了,则重启服务再次获取:systemctl restart wide-dhcpv6-client
后面如果有更好的方式再更新

参考