브리지 인터페이스를 설정하고, eth0을 추가하고, 인터넷에 연결하는 방법

브리지 인터페이스를 설정하고, eth0을 추가하고, 인터넷에 연결하는 방법

헤드리스 서버에 이것을 설정하려고 하는데 통과 br0하겠습니다 .eth0veth1ssh

특별한 네임스페이스에서 systemd 서비스를 실행하기 위한 준비로 이 작업을 수행합니다. 이 네임스페이스에는 가상 장치가 있는 피어가 엔드포인트로 있습니다 veth2.

이 프로세스에 대한 정적 경로를 설정해야 합니다. 내 경우에는 vpn다른 모든 트래픽이 표준 게이트웨이로 이동하는 동안 잠시 동안 패킷을 라우팅합니다 .

이것이 어떻게 작동하는지 파악하기 위해 ssh서버 연결이 중단되지 않을 정도로 빠르게 실행되는 작은 스크립트를 작성했습니다. 그러면 나는 traceroute성공할 수 있다 veth2. 서버에는 장치가 하나만 있고 ethWi-Fi가 없기 때문에 이 작업을 수행해야 합니다.

내 문제는 스크립트를 실행한 후 서버가 더 이상 인터넷에 액세스할 수 없다는 것입니다. 나는 아마도 여기서 많은 것을 놓치고 있을 것이다. 누구든지 도와줄 수 있나요?

내 스크립트:

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 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

@berndbaumch의 접근 방식을 시도했습니다.처음 5개 명령만 실행

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를 갖고 있는데 br0이는 eth0틀릴 수 있습니다.

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. 어쩌면 연결하려는 IP와 eth0동일한 IP를 갖는 것이 정상일 수도 있습니다. br0그렇지 않은 경우 해당 IP를 사용했는데 왜 제거되지 않았나요?ip addr del 192.168.100.222/24 dev eth0;

답변1

  1. macvlanveth-pair 및 브리지 대신 네트워크 네임스페이스에서 a를 사용하는 것을 고려하십시오 . 효과는 동일하지만 설정이 더 간단하고 효율적입니다.

  2. 둘 다 같은 다리 192.168.100.*/24에서 매우 잘못된 모습을 보입니다. 192.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 주소를 얻을 수 있으며, 라우팅이 네임스페이스별로 이루어지기 때문에 기본 경로도 다시 설정해야 합니다.

관련 정보