VPN을 통해서만 VirtualBox VM의 트래픽을 라우팅하는 방법은 무엇입니까?


10

VirtualBox VM (호스트 및 게스트 우분투 매버릭)이 있습니다. VPN 공급자는 OpenVPN을 사용하여 TUN을 설정합니다. VM의 트래픽이 VPN을 통과하고 VPN이 다운되면 (사고가 발생하면) 드롭되도록 설정하고 싶습니다. 제안? 내 iptables-fu는 약간 약합니다

내가 시도한 것 : VirtualBox의 "호스트 전용 네트워킹"을 사용하여 호스트의 게스트에게 vboxnet0 루프백 인터페이스를 제공하지만 iptables / 라우트를 올바르게 얻을 수 없습니다. 이미 NAT를 두 배로 늘 렸기 때문에 (ISP 및 홈 라우터) VM에서 NAT를 피하고 싶습니다. 더 많은 수준으로 내 머리가 튀어 나옵니다.

다른 가능성 : TAP (어떻게?)로 전환하고 VM으로 브리징 VM에서 VPN을 만들고 iptables와의 VPN 연결을 제외한 모든 eth0 트래픽 필터링

보너스 포인트 : 호스트 VPN을 통해 게스트에서 트래픽을 이중 터널링하지 않고 호스트 및 게스트에서 다른 VPN 종료점을 사용하는 방법을 알려줄 수있는 경우.

답변:


4

다른 해결책이 있지만 이것이 내가 생각하는 것입니다.

  1. 브리지 모드에서 VM을 설정하십시오. 그러면 가상 머신에 호스트와 동일한 네트워크에 IP 주소가 제공됩니다.
  2. 호스트에 VPN을 설정하십시오 (tun0이라고 가정하십시오).
  3. 호스트에서 라우팅 활성화 echo 1 > /proc/sys/net/ipv4/ip_forward
  4. 호스트 IP 주소를 기본 gw로 VM을 설정하십시오.

이 시점에서 호스트는 VPN 연결을 가지고 있으며 VM은 모든 트래픽을 호스트로 라우팅합니다. 해야 할 일은 게스트가 tun0 장치를 통과하지 않을 트래픽을 라우팅 할 수 없도록 호스트를 제한하는 것입니다. iptables 규칙을 사용하여 다음과 같이 할 수 있습니다.

iptables -P FORWARD DROP
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

해야 작동합니다. 첫 번째 규칙은 기본 정책을 FORWARD 체인의 DROP 패킷으로 설정합니다. 이는 호스트 (INPUT) 또는 호스트 (OUTPUT)로가는 패킷이 아니라 호스트가 라우팅하는 패킷에만 영향을줍니다. 두 번째 규칙은 tun0을 라우팅하는 모든 트래픽을 허용합니다. 원한다면 --source로 트래픽을 강화할 수 있습니다. 마지막 규칙은 tun0에서 응답이 VM으로 다시 라우팅되도록합니다.

VPN은 tun 인터페이스의 모든 패킷이 단일 IP에서 오는 것으로 예상합니까? 그렇다면 NAT 규칙도 추가해야합니다. 아마 다음과 같은 것 :

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.