Network-Interface

如何設置網橋介面,將 eth0 添加到其中並連接網際網路

  • February 11, 2021

我正在嘗試在我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

編輯:我的預設設置非常簡單。根據設備的IP從路由器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 和網橋。效果是一樣的,但是設置更簡單,效率更高。
  2. 在同一橋上同時擁有192.168.100.*/24和 a看起來非常錯誤。192.168.55.*/24您沒有告訴我們有關您的一般網路設置的任何資訊,但是您連接所有內容的網段應該有一個IP範圍。或者使用 VLAN,如果您想在同一條物理線路上使用不同的段。
  3. 我真的不記得您是否可以在不關閉或強制關閉介面的情況下進行上面所做的操作,因此還要在最後一步中設置和設置veth1。我的猜測是,這就是造成麻煩的原因。eth0``up
  4. 您沒有提到“無網際網路”是否發生在主網路名稱空間中nsben1,或兩者中。請編輯您的問題並添加此資訊。
  5. 還要檢查路由;在不知道其餘網路設置的情況下,我不知道預設路由是什麼,以及它是否仍然正確。檢查兩個名稱空間中的ip routeip route get 8.8.8.8

對於 macvlan,您創建一個新的 macvlan,將其設置eth0為 master,離開eth0主網路命名空間,並將新的 macvlan 移動到新的命名空間。在新的命名空間中,您可以使用 DHCP 或其他方式來獲取 IP 地址,並且您還需要再次設置預設路由(因為路由是每個命名空間的)。

引用自:https://unix.stackexchange.com/questions/633668