この理由で、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
ブリッジインターフェイスを使用して、サブネット間でトラフィックを転送することはできません。ブリッジは、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
パッケージがあります。ただし、ファイアウォールの管理に他の何かを使用している場合は、代わりにそれを使用する必要があります。