基础网络配置
配置静态 IP 和默认路由
软路由需要配置一个静态 IP 和一个默认路由,Ubuntu 可以使用 netplan 来配置,配置文件路径是 /etc/netplan/config.yaml
,通过 netplan apply
执行生效。下面根据不同方案给出一些配置示例。
主路由方案配置
对于主路由方案,需要选一个网口用来连接光猫来拨号上网,再选一个网口配置内网静态 IP 并连接交换机,用于内网通信和路由转发,下面是我用过的配置:
network:
version: 2
renderer: networkd
ethernets:
enp1s0: # 拨号网口
optional: true
accept-ra: false
dhcp4: no
dhcp6: no
addresses:
- 192.168.11.1/24
routes: # k3s 需要默认路由,不然会报错,导致 dhcp 服务起不来,从而导致局域网连不上,这里随便设置一个(启动会被pppoe拨号覆盖,这里设置用于没有拨号的情况下也连上机器)
- to: default
via: 192.168.11.1
enp2s0:
optional: true
accept-ra: false
dhcp4: no
dhcp6: no
addresses: # 固定网卡所拥有的内网IP地址段
- 10.10.10.2/24
- fddd:dddd:dddd:dddd::2/64
enp6s0: # 预留的管理网口,极端情况下用网线连管理网口登录 ssh
optional: true
accept-ra: false
dhcp4: no
dhcp6: no
addresses:
- 10.10.11.1/24
解释一下:
- 我的路由器有 6 个网口,Ubuntu 默认使用
enp*s0
的命名方式自动给网口分配网卡名称。 - 第一个网口我用来拨号上网,上联是光猫(光猫设置桥接,不要光猫的路由功能)。设置用第一个网口来做 PPPoE 拨号的话,会自动修改默认路由走虚拟出来的
ppp0
网卡,这里配置的默认路由不重要。 - 第二个网口设置一个内网静态 IP,用于内网通信。内网网段我计划用
10.10.10.0/24
,软路由静态 IP 使用10.10.10.2
,如果要用 IPv6,也得分配个固定的内网 IPv6 地址,写到addresses
里。 - 使用静态 IP,禁用掉 dhcp 动态获取 IP 的能力,所以每个网口的
dhcp4
和dhcp6
均设为 false。
旁路由方案配置
对于旁路由方案,不需要拨号,主要选一个网口来配置内网静态 IP 就行,这个网口连上交换机,配置示例:
network:
version: 2
renderer: networkd
ethernets:
enp1s0: # 主网口,默认路由指向主路由 IP
optional: true
accept-ra: false
dhcp4: no
dhcp6: no
addresses:
- 10.10.10.2/24
- fddd:dddd:dddd:dddd::2/64
routes:
- to: default
via: 10.10.10.14
enp6s0: # 预留的管理网口,极端情况下用网线连管理网口登录 ssh
optional: true
accept-ra: false
dhcp4: no
dhcp6: no
addresses:
- 10.10.11.1/24
桥接
如果需要,其它剩余网口设置桥接,当做交换机用,方面接入更多设备。可以在 netplan 配置里加下 bridges
配置:
bridges:
br0:
dhcp4: no
interfaces:
- enp3s0
- enp4s0
- enp5s0
配置拨号上网
旁路由方案的拨号上网这里不做介绍,不同场景配置方法各不相同,比如主路由是华为、小米路由器设备,需登录路由器管理页面进行配置;如果是让光猫来拨号,需登录光猫进行配置;如果使用双软路由方案,比如在 EXSI 里虚拟出 RouterOS 作为主路由,那么就登陆 RouterOS 主路由页面进行配置拨号上网。
这里只给出主路由方案的 Ubuntu 系统配置 PPPoE 拨号的方法。
首先是先有鸡还是先有蛋问题,在配置 PPPoE 拨号之前,我们需安装 pppoeconf
并使用它配置 PPPoE,但没有拨号的情况下又无法联网,安装不了。这时,确保你的 Ubuntu 还不是主路由,可以先用普通路由器配置拨号上网,在 netplan 配置中主网口处设置默认路由,即 routes
下的 via
填当前实际拨号上网的路由器 IP
地址,然后执行 netplan apply
让配置生效,测试没问题后再安装 pppoeconf
并用它配置 PPPoE:
# 安装 pppoeconf
sudo apt install -y pppoeconf
# 配置
sudo pppoeconf
根据提示配置好 PPPoE 拨号后,还需要实现 Ubuntu 开机自动执行 PPPoE 拨号,可以用 networkd-dispatcher
来实现:
#!/bin/env sh
# interface to pppoe workload
INTERFACE=enp1s0
if [ "${IFACE}" = "${INTERFACE}" ] ; then
echo "running pon ${INTERFACE}..."
pon dsl-provider
fi
如果不生效,可以在 rc.local
开机脚本里做(目前本人就是这么做的):
#!/bin/bash
echo "run pppoe"
pon dsl-provider
确保 rc-local 服务处于 enabled 状态:
systemctl enable rc-local
另外,路由器上网需要配置 IP MASQUERADE,即确保让出公网的报文的源 IP 自动 SNAT 成本机公网 IP,这样才能正常收到回包,我是通过 nftables 配置的,以下是 nftables 配置文件:
#!/sbin/nft -f
table inet ppp
delete table inet ppp
table inet ppp {
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname != "ppp0" return
meta l4proto { tcp, udp } ip saddr 10.10.0.0/16 counter masquerade
meta l4proto { tcp, udp } ip6 saddr fddd:dddd:dddd:dddd::/64 counter masquerade
}
}
配置混杂模式
对于软路由,配置网卡为混杂模式很重要,因为作为路由器,需要监听所有流量,这样才能做路由转发。可以在 /etc/network/if-up.d/
目录下配置脚本,实现开机自动为所有网卡打开混杂模式:
#!/bin/bash
for i in {1..6}
do
/sbin/ip link set enp${i}s0 promisc on
done
/sbin/ip link set br_lan promisc on