Kvm 게스트 네트워크에 연결할 수 없음

Kvm 게스트 네트워크에 연결할 수 없음

우분투를 실행하는 여러 게스트 VM이 포함된 kvm 설정이 있습니다.

어떤 이유로 인해 더 이상 포트 80을 통해 손님으로부터 외부로 트래픽을 얻을 수 없습니다. 다른 방법으로는 잘 작동합니다. Apache는 호스팅된 웹페이지를 원하는 대로 전달합니다. SSH와 같은 다른 포트도 잘 작동합니다.

예는 다음과 같습니다.

me@guest:~$ curl heise.de
curl: (7) Failed to connect to 2a02:2e0:3fe:100::8: Network is unreachable

Curl은 오랜 시간 초과 후 네트워크에 연결할 수 없어 실패하고 IPv6 주소를 사용하려고 시도하는 것처럼 보이지만 이는 예상되지 않습니다. Curl과 로컬 호스팅 도메인이 작동합니다.

핑이 작동합니다:

me@guest:~$ ping heise.de
PING heise.de (193.99.144.80) 56(84) bytes of data.
64 bytes from redirector.heise.de (193.99.144.80): icmp_req=1 ttl=245 time=6.92 ms
64 bytes from redirector.heise.de (193.99.144.80): icmp_req=2 ttl=245 time=7.05 ms

모든 게스트에게 동시에 일어난 일이기 때문에 호스트에게 한 일이 아닐까 생각합니다. 하지만 홈브루 iptables 규칙을 모두 꺼도 여전히 작동하지 않습니다.

따라서 내 http 요청이 kvm/libvirt 네트워킹 내부 어딘가에 있어서는 안 되는 곳으로 이동합니다. KVM의 네트워크 구성은 다음과 같습니다.

<network>
  <name>network_nat</name>
  <uuid>....</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:30:9B:D6'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254' />
      <host mac='52:54:00:e4:71:f5' name='web' ip='192.168.100.210' />
    </dhcp>
  </ip>  
</network>

내 손님이 해당 네트워크를 사용하도록 구성되었습니다. DHCP가 작동하는 것 같습니다. 적어도 게스트는 내가 구성한 IP 주소를 가지고 있습니다.

그런데 왜 나는 손님의 어떤 웹사이트에도 접근할 수 없나요?

답변1

재부팅 후 문제의 일부가 해결되었습니다. 아마도 여기의 조언을 따르는 것이 좋을 것입니다.http://wiki.libvirt.org/page/Networking네트워크 인터페이스를 수정하는 데 도움이 되었습니다.

나는 다음 줄을 추가했습니다./etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

또한 인터페이스 정의를 /etc/network/interfaces다음과 같이 변경했습니다.

auto  br0
iface br0 inet static
  address   176.9.xxx.xxx
  broadcast 176.9.xxx.xxx
  netmask   255.255.255.224
  gateway   176.9.xxx.xxx
  bridge_ports eth0
  bridge_fd 0 
  bridge_maxage 0
  bridge_stp off

이러한 2가지 변경(도움이 되었을 수도 있고 아닐 수도 있음)과 재부팅 컬 후에는 더 이상 시간 초과 및 "네트워크 연결 불가" 오류가 발생하지 않고 대신 내 로컬 아파치에서 결과가 생성되었습니다. iptables의 내 포트 포워딩이 책임이 있다는 것이 분명해졌습니다. 포트 80과 443의 포트 전달을 위한 수신 인터페이스를 지정하지 않았습니다. br0을 추가한 후 모든 것이 잘 작동했습니다.

포트 포워딩에 대한 iptables 규칙은 다음과 같습니다. 나는 이것을 방화벽으로 ufw와 함께 사용하고 있으므로 끝 부분에 다음 줄이 있습니다./etc/ufw/before.rules

필터 테이블에 다음이 추가됩니다.

-I FORWARD -m state -d 192.168.100.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT

그리고 이것은 내 NAT 테이블입니다. 오류로 인해 --in-interface매개변수가 생략되었습니다.

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 12345 -j DNAT --to 192.168.100.210:22
-A PREROUTING -p tcp --in-interface br0 --dport 80 -j DNAT --to 192.168.100.210:80
-A PREROUTING -p tcp --in-interface br0 --dport 443 -j DNAT --to 192.168.100.210:443
-A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
COMMIT

(참고: 어떤 이유로 ufw가 비활성화된 동안 동일한 규칙을 수동으로 입력하면 작동하는 포트 전달 구성이 생성되지 않습니다.)

관련 정보