Linux: 브리지 내에서 가상 네트워크 사용

Linux: 브리지 내에서 가상 네트워크 사용

전제:

AP로는 Raspberry Pi 3를 사용하고 있습니다. USB-이더넷 어댑터를 추가했는데 이것이 내 구성입니다.

  • eth0(WAN)으로 내장된 eth 포트
  • wlan0(LAN, 무선)으로 내장된 Wi-Fi 인터페이스
  • USB-이더넷 어댑터(eth1)(LAN, 유선)

wlan0과 eth1을 br0에 성공적으로 연결했습니다.

그런 다음 br0의 장치가 인터넷에 연결할 수 있도록 nat를 설정했습니다. 이 모든 것이 작동합니다.

질문:

이제 신뢰할 수 있는 장치(eth1:0)를 위한 하나의 가상 네트워크와 덜 신뢰할 수 있는 장치(eth1:1)를 위한 또 다른 가상 네트워크가 있도록 유선 LAN을 분할하려고 합니다.

아이디어는 br0에 eth1:0만 추가하는 것입니다. 이것이 작동하는 것 같지만 브리지를 나열하면 br0이 가상 인터페이스 eth1:0 대신 eth1을 직접 사용하는 것 같습니다.

실제로 다른 브리지(br1)를 만들고 다른 가상 네트워크(eth1:1)를 추가하려고 하면 인터페이스가 이미 브리지에 있다는 오류가 발생합니다.

따라서 가상 인터페이스는 브리지에 추가할 수 없고 상위 인터페이스에만 추가할 수 있는 것 같습니다.

이게 진짜야? 다른 방법이 있나요?

이것은 내가 사용하는 테스트 스크립트입니다.

function configure_firewall() {
    echo  CONFIGURE FIREWALL START
    ####################### FORWARDING #####################
    # Enable IP forwarding
    echo 1 > /proc/sys/net/ipv4/ip_forward

    # Allow forwarding of traffic LAN -> WAN
    iptables -A FORWARD -i ${BRIDGE} -o ${WAN} -j ACCEPT

    # Allow traffic WAN -> LAN but only as reply to communication initiated from the LAN
    iptables -A FORWARD -i ${WAN} -o ${BRIDGE} -m state --state RELATED,ESTABLISHED -j ACCEPT

    # Drop anything else
    iptables -A FORWARD -j DROP

    ####################### MASQUERADING ########################

    # Do the nat
    iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

    ###################### INPUT #############################
    # Allow local connections
    iptables -A INPUT -i lo -j ACCEPT

    iptables -A INPUT -i ${BRIDGE} -j ACCEPT
    iptables -A INPUT -p tcp --dport 22 -i ${WAN} -j ACCEPT
    iptables -A INPUT -i ${WAN} -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -j DROP

    ###################### OUTPUT #############################
    iptables -A OUTPUT -j ACCEPT
    echo  CONFIGURE FIREWALL END
}

function teardown_bridge() {
    echo TEARDOWN BRIDGE START
    ifconfig ${BRIDGE} down
    brctl delif ${BRIDGE} ${LAN}:0
    brctl delif ${BRIDGE} ${WIFI}
    brctl delbr ${BRIDGE}
    echo TEARDOWN BRIDGE END
}

function configure_bridge() {
    echo CONFIGURE BRIDGE START
    brctl addbr ${BRIDGE}
    brctl addif ${BRIDGE} ${LAN}:0
    brctl addif ${BRIDGE} ${WIFI}
    ifconfig ${BRIDGE} up 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.0
    echo CONFIGURE BRIDGE END
}

function configure_interfaces() {
    echo CONFIGURE INTERFACES START
    ifconfig ${LAN} up 0.0.0.1
    ifconfig ${LAN}:0 up 0.0.0.2
    ifconfig ${LAN}:1 up 0.0.0.3
    echo CONFIGURE INTERFACES END
}

function teardown_interfaces() {
    echo TEARDOWN INTERFACES START
    ifdown ${LAN}:1
    ifdown ${LAN}:0
    ifdown ${LAN}
    echo TEARDOWN INTERFACES END
}

function delayed_reset() {
    for i in `seq 15 -1 0`; do
        sleep 1
        echo ${i}
    done
    sync
    reboot
    exit
}

#test_network

#if [ $? -ne 0 ] ; then
    teardown_firewall
    teardown_bridge
    teardown_interfaces
    configure_interfaces
    configure_bridge
    configure_firewall
    #delayed_reset
#fi

스크립트를 실행한 후 다음을 ifconfig실행하면 가상 네트워크가 존재하는 것처럼 보입니다.

eth1      Link encap:Ethernet  HWaddr 00:13:3b:62:11:f6  
          inet addr:0.0.0.1  Bcast:255.255.255.255  Mask:0.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30712 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19110 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5261152 (5.0 MiB)  TX bytes:5355909 (5.1 MiB)

eth1:0    Link encap:Ethernet  HWaddr 00:13:3b:62:11:f6  
          inet addr:0.0.0.2  Bcast:255.255.255.255  Mask:0.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1:1    Link encap:Ethernet  HWaddr 00:13:3b:62:11:f6  
          inet addr:0.0.0.3  Bcast:255.255.255.255  Mask:0.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

그러나 모든 것은 다음 eth1과 같습니다 br0.

root@raspberrypi:/home/pi# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.00133b6211f6       no              eth1
                                                        wlan0

이것은 이것을 확인하는 것 같습니다:

root@raspberrypi:/home/pi# brctl addbr br1
root@raspberrypi:/home/pi# brctl addif br1 eth1:1
device eth1:1 is already a member of a bridge; can't enslave it to bridge br1.

노트: 나는 시청했다Linux에서 가상 네트워크 인터페이스 생성 및 브리지하지만 iproute2를 참조하고 있기 때문에 오래된 것 같습니다.

답변1

br0eth1 인터페이스 는 두 개의 서로 다른 IP 주소를 가진 동일한 인터페이스 eth1이기 때문에 하나의 인터페이스 eth1에서 및 브리지를 생성할 수 없습니다. 유선 네트워크와 스위치가 이를 허용하는 경우 VLAN을 생성할 수 있습니다. 두 개의 VLAN을 생성하면 브리지 및 에 사용할 수 있는 두 개의 서로 다른 인터페이스를 갖게 됩니다.br1eth1:0eth1:1eth1.10eth1.20br0br1

관련 정보