如何設置網橋介面,將 eth0 添加到其中並連接網際網路
我正在嘗試在我
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;
- 考慮使用
macvlan
網路命名空間中的 a 而不是 veth-pair 和網橋。效果是一樣的,但是設置更簡單,效率更高。- 在同一橋上同時擁有
192.168.100.*/24
和 a看起來非常錯誤。192.168.55.*/24
您沒有告訴我們有關您的一般網路設置的任何資訊,但是您連接所有內容的網段應該有一個IP範圍。或者使用 VLAN,如果您想在同一條物理線路上使用不同的段。- 我真的不記得您是否可以在不關閉或強制關閉介面的情況下進行上面所做的操作,因此還要在最後一步中設置和設置
veth1
。我的猜測是,這就是造成麻煩的原因。eth0``up
- 您沒有提到“無網際網路”是否發生在主網路名稱空間中
nsben1
,或兩者中。請編輯您的問題並添加此資訊。- 還要檢查路由;在不知道其餘網路設置的情況下,我不知道預設路由是什麼,以及它是否仍然正確。檢查兩個名稱空間中的
ip route
和ip route get 8.8.8.8
。對於 macvlan,您創建一個新的 macvlan,將其設置
eth0
為 master,離開eth0
主網路命名空間,並將新的 macvlan 移動到新的命名空間。在新的命名空間中,您可以使用 DHCP 或其他方式來獲取 IP 地址,並且您還需要再次設置預設路由(因為路由是每個命名空間的)。