트래픽이 한 가상 브리지에서 다른 가상 브리지로 이동하도록 2개의 가상 브리지를 연결하는 방법은 무엇입니까?

트래픽이 한 가상 브리지에서 다른 가상 브리지로 이동하도록 2개의 가상 브리지를 연결하는 방법은 무엇입니까?

etc/network/interfaces를 통해 구성된 데비안 시스템, 현재 상황

브리지 "br0"에는 2개의 물리적 이더넷 인터페이스가 있습니다. eth0(WAN 측, ISP 모뎀/라우터에 연결됨) eth1(LAN 측, 물리적 스위치에 연결됨)

eth0과 eth1 사이의 트래픽은 IPtables 방화벽과 Suricata를 IPS로 통과합니다. 이 설정은 현재 잘 작동합니다.

이제 Linux 컨테이너를 통해 이 설정에 "pi-hole"을 추가하고 싶습니다. Linux 컨테이너에는 가상 이더넷 인터페이스를 추가하려면 가상 브리지가 필요합니다.

그래서 나는 다음을 달성하고 싶습니다 :

가상 브리지 "br0" - eth0 사용(WAN)

<-->

가상 브리지 "lanbr0"에 연결 - eth1(LAN) 사용 - veth0(LXC의 가상 이더넷 인터페이스) 사용

이렇게 하면 나중에 필요할 경우 "lanbr0" 브리지에 더 많은 인터페이스를 추가할 수 있습니다.

편집하다 다음 명령을 사용하여 이 작업을 수행할 수 있습니다. ip link add veth0 type veth Peer name veth1

그런 다음 veth0을 br0에 추가하고 veth1을 lanbr0에 추가하고 모든 인터페이스를 가져온 후 eth1을 br0에서 lanbr0으로 이동합니다.

하지만 /etc/network/interfaces를 통해 이 작업을 어떻게 수행합니까? (아래 표시된 대로 부팅 중에 로드되도록 합니까?)

답변1

가상 이중 인터페이스를 구체적으로 다루는 조항은 없습니다 type veth. 그래서 일부 땜질은 주로 다음을 사용하여 수행되었습니다.pre-up옵션. 여기에 veth0및 를 유지했지만 다른 이름(예: 및 ) veth1을 선택하는 것을 고려해야 합니다. 이는 제공되지 않은 경우(예: ) 기본적으로 선택되는 이름 이며 충돌할 수 있기 때문입니다.veth-br0veth-lanbr0ip link add type veth

veth인터페이스 의 경우 :

iface veth0 inet manual
        pre-up ip link add veth0 type veth peer name veth1 || :
        hwaddress 02:00:00:01:00:00

iface veth1 inet manual
        pre-up ip link add veth1 type veth peer name veth0 || :
        hwaddress 02:00:00:01:00:01

이렇게 하면 두 인터페이스 중 하나를 시작할 때 두 인터페이스가 모두 활성화됩니다. || :피어 인터페이스가 이미 "기타" 인터페이스에 의해 설정되어 있으므로 여기서는 실패하지 않습니다. 내부 상태 이유로 인해 ifup둘 중 하나를 올리면 다른 하나가 나타나더라도 결국에는 둘 다 발생해야 합니다. 이는 의도된 용도에 따라 선택 사항일 수 hwaddress있으며 어쨌든 다른 올바른 값으로 설정될 수 있습니다. 브리지는 첫 번째 슬레이브 인터페이스의 MAC 주소를 얻습니다.

이제 교량에서 사용해보세요. 모든 설정을 제공하지는 않습니다(실제로 제공하지 않았기 때문에). veth관련 부분만 제공합니다. 내가 추측할 수 없는 것과 내가 일부 XXXX를 어디에 두었는지 조정해야 할 것입니다 ....inet XXXX inet manual inet staticinet dhcp

auto br0
iface br0 inet XXXX
    pre-up ifup veth0
    bridge_ports eth0 veth0        
    ...

auto lanbr0
iface lanbr0 inet XXXX
    pre-up ifup veth1
    bridge_ports veth1 eth1
    address xx.xx.xx.xx
    netmask 255.255.255.0
    ...

참고 ifup vethX내부에 명령을 추가했습니다. 그렇지 않으면 인터페이스가 존재하지 않는다고 불평하고 이 인터페이스 없이 브리지를 시작하여 완료된 것으로 간주합니다. 이미 논리적(상태를 의미)인 인터페이스를 호출하는 것은 오류가 아니기 || :때문에 여기서는 사용할 필요가 없습니다 .ifupdown

누락된 부분을 완성한 후 해당 부분을 별도의 구성 파일 /etc/network/interfaces.d(또는 구성 파일 아님 /etc/network/interfaces)에 넣으면 작동합니다.

처음에 작동하지 않으면 모든 인터페이스를 논리적으로 종료하고(논리적으로는 를 사용함을 의미함 ifdown) 다시 시도하십시오. 이는 잘못된 논리적 상태로 인해 일부 인터페이스가 올바르게 (재)구성되지 않기 때문입니다.

또한 NetworkManager와 같은 다른 네트워크 관리자와 상호 작용할 수도 있습니다. 특정 인터페이스를 무시하도록 허용하는 옵션이 있을 수 있지만 이는 이 답변의 범위를 벗어납니다.

답변2

참고로 다음은 전체 인터페이스 스크립트입니다(일부 주소에는 xx가 추가됨).

# The loopback network interface
auto lo
iface lo inet loopback

# IPv4 address
auto enp8s0
iface enp8s0 inet manual
        offload-gro off
        offload-lro off

auto enp0s31f6
iface enp0s31f6 inet manual

iface veth0 inet manual
        pre-up ip link add veth0 type veth peer name veth1 || :
        hwaddress 02:00:00:01:00:00

iface veth1 inet manual
        pre-up ip link add veth1 type veth peer name veth0 || :
        hwaddress 02:00:00:01:00:01

# Bridge setup
auto br0
iface br0 inet static
    pre-up ifup veth0
    bridge_ports enp8s0 veth0
    bridge_fd 0
    bridge_maxwait 0
        address 192.168.xx.xx
        broadcast 192.168.xx.xx
        network 192.168.xx.xx
        netmask 255.255.255.0
        gateway 192.168.xx.xx
        dns-nameservers xx.xx.xx.xx xx.xx.xx.xx

auto lanbr0
iface lanbr0 inet manual
    pre-up ifup veth1
    bridge_ports veth1 enp0s31f6

다시 한 번 감사드립니다 AB

관련 정보