브리지 네트워크 뒤의 qemu 게스트에서 인터넷 호스트에 액세스

브리지 네트워크 뒤의 qemu 게스트에서 인터넷 호스트에 액세스

동일한 개인 네트워크에서 여러 qemu 작업을 설정하려고 합니다. 호스트 시스템 외부에서 액세스할 수 없도록 하고 싶지만 서로 액세스하고 인터넷에서 리소스에 액세스할 수 있어야 합니다. 맥락상 이것은 스래시 쿠버네티스 설정이 될 것입니다.

내가 뭘 한거지:

  1. 비공개 IP로 브리지 인터페이스 설정
ip link add name br0 type bridge
ip addr add 10.24.0.1/24 dev br0
ip link set dev br0 up
  1. qemu-bridge-helper다음 줄을 추가하여 액세스를 허용하세요./etc/qemu/bridge.conf
allow br0
  1. 브리지 인터페이스에 바인딩된 DHCP 서버를 시작합니다.
dnsmasq --interface=br0 --bind-interfaces --dhcp-range=10.24.0.2,10.24.0.254
  1. 게스트 트래픽이 iptables를 건너뛰도록 허용
sysctl -w net.bridge.bridge-nf-call-iptables=0

이 시점에서 다음을 수행할 수 있습니다.

  • 호스트에서 게스트에 액세스(ping/ssh)
  • 게스트에서 다른 게스트에 액세스(ping/ssh)합니다.
  • 게스트에서 호스트에 액세스(ping/ssh)
  • 게스트로부터 호스트의 다른 IP를 핑합니다.
  • 게스트에서 호스트 이름 조회 수행

내가 할 수 없는 것은 인터넷 리소스와 같은 호스트 외부의 모든 것에 액세스하는 것입니다.

도커를 설치했는데 도커 네트워크가 제대로 작동합니다. 예를 들어 docker run -t alpine ping google.com완벽하게 작동합니다.

네트워크에서 패킷이 전달되도록 허용해야 할 것 같은데 10.24.0.0어떻게 해야 할지 모르겠습니다. 나는 열심히 노력했다

iptables -I FORWARD -i br0 -j ACCEPT
iptables -I FORWARD -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o '!br0' --source 10.24.0.0/24 -j MASQUERADE

그러나 이것은 도움이 되지 않습니다.

명확하게 설명하려면 IP 전달을 활성화하세요.

$ cat /proc/sys/net/ipv4/ip_forward
1

QEMU 게스트가 인터넷에 액세스할 수 있도록 하려면 무엇을 변경해야 합니까?

답변1

잘못된 규칙을 수정하면 다음과 같이 작동합니다.

iptables -t nat -A POSTROUTING -o '!br0' --source 10.24.0.0/24 -j MASQUERADE
                               ^^^^^^^^^

(이름이 지정된 인터페이스가 없기 때문에 일치하지 않습니다 !br0)

입력하다:

iptables -t nat -A POSTROUTING ! -o br0 --source 10.24.0.0/24 -j MASQUERADE

iptables가 부정적인 것으로 간주되지 않음을 보여주기 위해 (더 간단한) 가상 인터페이스를 사용하는 간단한 테스트 '!br0':

ip link add '!test' type dummy
ip address add dev '!test' 10.11.12.1/24
ip link set '!test' up
iptables -I OUTPUT -o '!test'

이제 이 인터페이스를 통해 ping을 시도할 수 있습니다. 예를 들어 인터페이스를 사용할 때는 카운터가 증가하고 사용하지 않을 때는 증가하지 않는 ping 10.11.12.2것을 볼 수 있습니다 .iptables-save -c |grep test

# iptables-save -c|grep test
[1:84] -A OUTPUT -o !test

관련 정보