概述
由于家里网线布局问题,只有一条网线能够到达我卧室,但是PC和树莓派均需要网线上网,因此,一个奇怪的需求诞生了:
- 给树莓派加一个USB网卡
- 将USB网卡和树莓派自身网卡桥接
- PC直连树莓派USB网卡,树莓派网卡直连路由器
- PC通过树莓派的网卡桥接进行上网
需求
- 树莓派
- USB网卡
- 网线
准备操作
首先,我们可以将树莓派连上Wifi,防止在之后的网络真空期不能使用SSH连接树莓派。
创建网桥
这里,我们将直接通过配置文件的方式,在/etc/systemd/network
文件夹下创建多个文件,让树莓派在重启后能够自动创建相关的网络设备。
- br-lan.netdev:自动创建网桥
[NetDev]
Name=br-lan
Kind=bridge
- br-lan.network:配置网桥的网络,打开DHCP
[Match]
Name=br-lan
[Network]
DHCP=yes
DNSSEC=no
- en.network:USB网卡接入网桥
[Match]
Name=en*
[Network]
DHCP=no
DNSSEC=no
Bridge=br-lan
- eth.network:树莓派网卡接入网桥
[Match]
Name=eth*
[Network]
DHCP=no
DNSSEC=no
Bridge=br-lan
完成以上几个文件后,在树莓派重启后将会自动完成网桥的建立。但是,现在先别重启,还需要对iptables
进行转发配置。
备注
树莓派接入更多网卡之后,可能需要编辑/usr/lib/systemd/system/systemd-networkd-wait-online.service
,忽略树莓派本身网卡eth0
和USB网卡:
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --ignore eth0 --ignore enp1s0u1u2
不然可能出现systemd-netword-wait-online
启动超时的问题。
iptables
增加网桥转发规则,并持久化
# iptables -I FORWARD_direct -i br-lan -o br-lan -j ACCEPT
# iptables-save > /etc/iptables/iptables.rules
# systemctl enable iptables
如果有IPv6环境,也需要进行配置:
# ip6tables -I FORWARD_direct -i br-lan -o br-lan -j ACCEPT
# ip6tables-save > /etc/iptables/ip6tables.rules
# systemctl enable ip6tables
结果
最后,重启树莓派,我们的电脑就能够通过树莓派连接到路由器,通过路由器的DHCP获得IP地址上网了,同时,树莓派上的网桥br-lan
也能够通过DHCP获取到树莓派的IP地址。