Linux:ブリッジ内で仮想ネットワークを使用する

Linux:ブリッジ内で仮想ネットワークを使用する

前提:

APにはRaspberry Pi 3を使用しています。 USB-Ethernetアダプタを追加しましたが、これは私の設定です。

  • eth0(WAN)として組み込まれたethポート
  • wlan0(LAN、無線)で内蔵されたWi-Fiインターフェース
  • USB-イーサネットアダプタ(eth1)(LAN、有線)

wlan0とeth1をbr0に正常に接続しました。

その後、br0のデバイスがインターネットに接続できるようにnatを設定しました。これはすべてうまくいきます。

質問:

これで、信頼できるデバイス(eth1:0)用の1つの仮想ネットワークと信頼性の低いデバイス(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インターフェイスは2つの異なるIPアドレスを持つ同じインターフェイスeth1であるため、1つのインターフェイスeth1でブリッジを作成できません。有線ネットワークとスイッチがそれを許可している場合は、VLANを作成できます。 2つのVLANを作成すると、ブリッジと使用可能な2つの異なるインターフェイスがあります。br1eth1:0eth1:1eth1.10eth1.20br0br1

おすすめ記事