호스트에는 사용 가능한 단일 외부 IP가 있으므로 KVM 게스트를 NAT로 설정했습니다.
외부에서 손님에게 일부 요청을 전달하기 위해 포트 전달을 어떻게 설정합니까?
이것에 대한 문서를 찾을 수 없습니다. 가장 가까운 대답은 아마도이 대답 일 수도 있지만 libvirt 0.8.3 에서이 작업을 수행하는 더 쉬운 방법이 있다고 언급되었습니다. 누구든지 이것을하는 최신 방법을 알고 있습니까?
호스트에는 사용 가능한 단일 외부 IP가 있으므로 KVM 게스트를 NAT로 설정했습니다.
외부에서 손님에게 일부 요청을 전달하기 위해 포트 전달을 어떻게 설정합니까?
이것에 대한 문서를 찾을 수 없습니다. 가장 가까운 대답은 아마도이 대답 일 수도 있지만 libvirt 0.8.3 에서이 작업을 수행하는 더 쉬운 방법이 있다고 언급되었습니다. 누구든지 이것을하는 최신 방법을 알고 있습니까?
답변:
다음은 후크 스크립트 ( source )를 사용하여 포트 전달을 설정하는 더 좋은 방법 입니다.
에서 /etc/libvirt/hooks/qemu
:
#!/bin/sh
GUEST_NAME=
HOST_PORT=
GUEST_IPADDR=
GUEST_PORT=
if [ "$1" = "$GUEST_NAME" ]; then
if [ "$2" = start ]; then
iptables -t nat -A PREROUTING -p tcp --dport "$HOST_PORT" \
-j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
iptables -I FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
--state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
elif [ "$2" = stopped ]; then
iptables -t nat -D PREROUTING -p tcp --dport "$HOST_PORT" \
-j DNAT --to "$GUEST_IPADDR:$GUEST_PORT"
iptables -D FORWARD -d "$GUEST_IPADDR/32" -p tcp -m state \
--state NEW -m tcp --dport "$GUEST_PORT" -j ACCEPT
fi
fi
libvirt 설정에 맞게 상단에 4 개의 변수를 설정해야합니다.
우분투에서 libvirt-bin을 다시 시작해야합니다.
sudo sh -c 'service libvirt-bin stop; service libvirt-bin start'
그런 다음 게스트를 다시 시작해야합니다. 우분투에서는 /etc/apparmor.d/usr.sbin.libvirtd
후크 스크립트가 실행될 수 있도록 조정해야합니다 .
옆에
/usr/sbin/* PUx,
덧붙이다
/etc/libvirt/hooks/* PUx,
그런 다음 의류를 다시로드하십시오.
sudo service apparmor reload
$GUEST_IPADDR
virsh / dumpxml / iface-dumpxml을 사용하여 자동 구성하는 방법이 있지만 찾지 못했습니다. 또는 네트워크 xml : documentation 에서 IP를 정적으로 설정할 수 있습니다 .
내가 알 수있는 한, 네트워크 필터는 가상 네트워크에서 발생하는 것을 제한하는 데만 사용할 수 있으며 포트 전달에는 유용하지 않습니다.
/etc/libvirt/hooks/** rmix,
기본적으로 apparmor config 파일에 줄 이 있으며 동일한 효과가있는 것 같습니다. 의류 구성을 수정하지 않고 스크립트를 실행할 수 있습니다.
나는 비슷한 상황에 처해있다. virbr0 인터페이스를 통해 호스트에 연결된 개인 NAT 네트워크의 KVM에서 Windows Server를 실행하고 있습니다. 원격 데스크톱을 통해 VM에 액세스하고 싶습니다. 따라서 트래픽을 포트 3389 (RDP)로 VM 포트 3389로 전달해야합니다. 일부 iptable 규칙으로이를 달성했습니다.
/ sbin / iptables -t nat -A PREROUTING -p tcp -d HOST-IP --dport 3389 -j DNAT-대상 VM-IP : 3389
/ sbin / iptables -I FORWARD -m state -d VM-NET / 24 --state NEW, RELATED, ESTABLISHED -j ACCEPT
물론 HOST-IP, VM-IP 및 VM-NET을 채택해야합니다. 그러나 iptables와 libvirt를 엉망으로 만드는 것은 까다 롭습니다. 현재 iptable 규칙을 엉망으로 인해 손실 된 VM에서 인터넷에 액세스 할 수있는 솔루션을 찾고 있습니다.
게스트 네트워킹은 어떻게 설정됩니까? 브리지 된 경우 포트를 게스트의 IP로 전달하기 만하면됩니다. 게스트가 아직 다른 NAT 뒤에 있으면 하나의 libvirt가 설정되고 복잡해집니다.
어쨌든 여기서는 물리적 머신처럼 VM을 간단하게 취급합니다.