我正在尝试在无头服务器上进行设置br0
,eth0
我veth1
通过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/24
MAC
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 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 unreachable
从nsben1
互联网的结果来看,默认命名空间无法访问。这并不一定意味着有问题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;
在脚本中。当我这样做时,我得到以下输出,其中br0
和eth0
仍然具有相同的 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
这是可以理解的。也许与所连接的eth0
IP具有相同的IP是正常的。br0
如果不是,为什么尽管我使用了IP却没有被删除ip addr del 192.168.100.222/24 dev eth0;
答案1
考虑使用
macvlan
网络命名空间中的 a 来代替 veth-pair 和网桥。效果是一样的,但设置更简单,效率更高。两者都
192.168.100.*/24
在192.168.55.*/24
同一座桥上看起来非常错误。您没有告诉我们有关您的一般网络设置的任何信息,但是您连接所有设备的网段应该有一个单身的IP范围。如果您希望同一物理线路上有不同的网段,则可以使用 VLAN。我真的不记得您是否可以在接口不关闭或强制关闭的情况下执行上面所做的操作,因此还要在最后一步中设置
veth1
和。我的猜测是这就是造成麻烦的原因。eth0
up
您没有提到“无互联网”是否发生在主网络命名空间、
nsben1
或两者中。请编辑您的问题并添加此信息。还要检查路由;在不知道网络设置的其余部分的情况下,我不知道默认路由是什么,以及它是否仍然正确。检查两个命名空间中的
ip route
和。ip route get 8.8.8.8
对于 macvlan,您创建一个新的 macvlan,将eth0
其设置为主,保留eth0
主网络命名空间,然后将新的 macvlan 移动到新命名空间。在新的命名空间中,您可以使用 DHCP 或其他方式来获取 IP 地址,并且还需要再次设置默认路由(因为路由是按命名空间进行的)。