web-dev-qa-db-ja.com

異なるサブネットを持つブリッジネットワーク

この理由で、lxc/virshを使用してWebサーバーを仮想化したいので、IPをlxcコンテナーに渡します。しかし、私のIPは異なるサブネットからのものであり、私が試したものです(しかし成功しませんでした):

Virshネットワーク:

<interface type='bridge'>
    <source bridge='br0'/>
    <model type='virtio'/>
</interface>

IP 1:xxx.xxx.184.96(専用サーバーIP)

xxx.xxx.37.220(LXCの場合)

/ etc/network/interfaces:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0


iface eth0 inet static
        address xxx.xxx.184.96
        netmask 255.255.255.128
        network xxx.xxx.184.0
        broadcast xxx.xxx.184.127
        gateway xxx.xxx.184.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8 8.8.4.4

iface br0 inet static
        bridge_ports eth0
        bridge_stp on
        address xxx.xxx.37.220
        netmask 255.255.255.255
3
shim_

ブリッジインターフェイスを使用して、サブネット間でトラフィックを転送することはできません。ブリッジは、2つのサブネット(レイヤー3)ではなく、2つのレイヤー2ネットワークに参加するためのものです。代わりに、ネットワーク間でトラフィックをルーティングする必要があります。
技術的にはそれらをブリッジすることはできますが、両方のサブネット上のすべての単一ホストにルーティングルールを追加して、他のサブネットと直接通信できることを知らせる必要があります。これは非常に面倒で、あなたがやりたいことではないかと思います。

したがって、トラフィックをルーティングします。基本的に、ハイパーバイザーボックスを小さなルーターに変える必要があります。特定のポートへの着信トラフィックは、仮想化されたインスタンスに転送する必要があることを伝える必要があります。次に、仮想化されたインスタンスが応答すると、ハイパーバイザーボックスがトラフィックを変更して、トラフィックがそれ自体から来たように見せます。これはDNATを介して行われます。

iptables -t nat -I PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 172.0.0.2

このルールは、eth0に入ってくるトラフィックをTCPポート80および443に転送し、それを172.0.0.2に転送する(172.0.0.2を次のIPに変更する)ことを示しています。仮想化されたWebサーバー)。


次に、このルールを保存して、システムを再起動したときに元に戻るようにする必要があります。この部分は異なります。 Ubuntuにはiptables-persistentを実行できる/etc/init.d/iptables-persistent saveパッケージがあります。ただし、ファイアウォールの管理に他の何かを使用している場合は、代わりにそれを使用する必要があります。

3
Patrick