이러한 이유로 나는 lxc/virsh를 사용하여 웹 서버를 가상화하고 IP를 lxc 컨테이너에 전달하려고 합니다. 하지만 내 IP가 다른 서브넷에 있으므로 시도했지만 성공하지 못했습니다.
위시 네트워크:
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
IP 1: xxx.xxx.184.96(전용서버 IP)
xxx.xxx.37.220(LXC용)
/etc/네트워크/인터페이스:
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
답변1
브리지 인터페이스를 사용하여 서브넷 간에 트래픽을 전달할 수 없습니다. 브리지는 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
이 규칙은 TCP 포트 80 및 443에서 들어오는 트래픽을 수신하여 ( 가상 웹 서버의 IP로 변경) eth0
로 전달하도록 지시합니다.172.0.0.2
172.0.0.2
이제 시스템을 다시 시작할 때 복원되도록 이 규칙을 저장해야 합니다. 이 부분은 다를 것이다. Ubuntu에는 iptables-persistent
이를 수행할 수 있는 패키지가 있습니다 /etc/init.d/iptables-persistent save
. 그러나 방화벽을 관리하기 위해 다른 것을 사용하는 경우에는 이를 사용해야 합니다.