如何设置桥接接口,将 eth0 添加到其中,并连接互联网

如何设置桥接接口,将 eth0 添加到其中,并连接互联网

我正在尝试在无头服务器上进行设置br0eth0veth1通过ssh.

我这样做是为了在特殊的命名空间中运行 systemd 服务做准备。该命名空间将具有虚拟设备的对等点作为其端点:veth2

这应该可以为此进程设置静态路由。就我而言,它会将包路由一段vpn时间,而所有其他流量都会到达标准网关。

为了弄清楚这是如何工作的,我编写了一个小脚本,它执行速度非常快,以至于ssh与服务器的连接不会中断。然后我就可以traceroute成功veth2了。服务器只有一台eth设备,没有 wifi,这就是为什么我必须这样做。

我的问题是,执行脚本后,服务器无法再访问互联网。我可能在这里错过了很多。有人可以帮忙吗?

我的脚本:

pi@testpi:~ $ cat add_bridge_and_veth1.sh 
brctl addbr br0;
ip addr del 192.168.100.222/24 dev eth0;
ip addr add 192.168.100.222/24 dev br0;
brctl addif br0 eth0;
ip link set dev br0 up;
ip link add name veth1 type veth peer name veth2;
brctl addif br0 veth1;
brctl show;
ip netns add nsben1;
ip link set veth2 netns nsben1;
ip netns exec nsben1 ip addr add 192.168.55.101/24 dev veth2;
ip netns exec nsben1 ip link set lo up;
ip netns exec nsben1 ip link set veth2 up;

在默认命名空间中此后没有互联网:

pi@testpi:~ $ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  192.168.100.222 (192.168.100.222)  3085.668 ms !H  3085.488 ms !H  3085.393 ms !H
pi@testpi:~ $ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.100.222 icmp_seq=1 Destination Host Unreachable

编辑:我的默认设置非常简单。根据设备的:从路由器eth0获取固定IP 。192.168.100.0/24MAC192.168.100.222

pi@testpi:~ $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether b8:27:eb:98:70:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.222/24 brd 192.168.100.255 scope global dynamic noprefixroute eth0
       valid_lft 83282sec preferred_lft 72482sec
    inet6 fe80::247e:fd3c:36d7:68f5/64 scope link 
       valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether b8:27:eb:98:70:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.222/24 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fe98:704b/64 scope link 
       valid_lft forever preferred_lft forever
5: veth1@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000
    link/ether e2:bc:58:01:67:92 brd ff:ff:ff:ff:ff:ff link-netns nsben1
    inet 169.254.205.121/16 brd 169.254.255.255 scope global noprefixroute veth1
       valid_lft forever preferred_lft forever
    inet6 fe80::db71:b4e9:c60f:5865/64 scope link 
       valid_lft forever preferred_lft forever

没有网络nsben1,但这还不是我主要关心的问题。我首先想让一切都在默认命名空间中工作。

root@testpi:~# ip netns exec nsben1 ping 8.8.8.8
connect: Network is unreachable

ip route这里是默认值和命名空间的输出nsben1。我认为Network is unreachablensben1互联网的结果来看,默认命名空间无法访问。这并不一定意味着有问题nsben1,但即使这不是目前的主要问题。

root@testpi:~# ip route
192.168.55.0/24 dev veth2 proto kernel scope link src 192.168.55.101 
root@testpi:~# ip route get 8.8.8.8
RTNETLINK answers: Network is unreachable
root@testpi:~# ip netns exec nsben1 ip route
192.168.55.0/24 dev veth2 proto kernel scope link src 192.168.55.101 
root@testpi:~# ip netns exec nsben1 ip route get 8.8.8.8
RTNETLINK answers: Network is unreachable

为了完整ip a起见nsben1

root@testpi:~# ip netns exec nsben1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
4: veth2@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 92:31:7e:0f:89:9d brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.55.101/24 scope global veth2
       valid_lft forever preferred_lft forever
    inet6 fe80::9031:7eff:fe0f:899d/64 scope link 
       valid_lft forever preferred_lft forever

我尝试了@berndbausch的方法只执行前五个命令

brctl addbr br0;
ip addr del 192.168.100.222/24 dev eth0;
ip addr add 192.168.100.222/24 dev br0;
brctl addif br0 eth0;
ip link set dev br0 up;

在脚本中。当我这样做时,我得到以下输出,其中br0eth0仍然具有相同的 IP,这可能是错误的:

pi@testpi:~ $ sudo ./add_bridge.sh
pi@testpi:~ $ ip route
192.168.100.0/24 dev br0 proto kernel scope link src 192.168.100.222 
pi@testpi:~ $ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether b8:27:eb:98:70:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.222/24 brd 192.168.100.255 scope global dynamic noprefixroute eth0
       valid_lft 86389sec preferred_lft 75589sec
    inet6 fe80::247e:fd3c:36d7:68f5/64 scope link 
       valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether b8:27:eb:98:70:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.222/24 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::ba27:ebff:fe98:704b/64 scope link 
       valid_lft forever preferred_lft forever

然后我尝试执行添加的脚本ip link set dev eth0 down;up如下所示:

ip link set dev eth0 down;
brctl addif br0 eth0;
ip link set dev eth up;

我失去了联系,ssh这是可以理解的。也许与所连接的eth0IP具有相同的IP是正常的。br0如果不是,为什么尽管我使用了IP却没有被删除ip addr del 192.168.100.222/24 dev eth0;

答案1

  1. 考虑使用macvlan网络命名空间中的 a 来代替 veth-pair 和网桥。效果是一样的,但设置更简单,效率更高。

  2. 两者都192.168.100.*/24192.168.55.*/24同一座桥上看起来非常错误。您没有告诉我们有关您的一般网络设置的任何信息,但是您连接所有设备的网段应该有一个单身的IP范围。如果您希望同一物理线路上有不同的网段,则可以使用 VLAN。

  3. 我真的不记得您是否可以在接口不关闭或强制关闭的情况下执行上面所做的操作,因此还要在最后一步中设置veth1和。我的猜测是这就是造成麻烦的原因。eth0up

  4. 您没有提到“无互联网”是否发生在主网络命名空间、nsben1或两者中。请编辑您的问题并添加此信息。

  5. 还要检查路由;在不知道网络设置的其余部分的情况下,我不知道默认路由是什么,以及它是否仍然正确。检查两个命名空间中的ip route和。ip route get 8.8.8.8


对于 macvlan,您创建一个新的 macvlan,将eth0其设置为主,保留eth0主网络命名空间,然后将新的 macvlan 移动到新命名空间。在新的命名空间中,您可以使用 DHCP 或其他方式来获取 IP 地址,并且还需要再次设置默认路由(因为路由是按命名空间进行的)。

相关内容