VirtualBox - 인터넷이 있는 "호스트 전용"

VirtualBox - 인터넷이 있는 "호스트 전용"

알았어 친구들! 이번에는 도움을 주시면 정말 감사하겠습니다! =|

나는 그것을 사용하고 있다가상 상자가상 머신에서 다음을 사용하여 게스트 머신에 인터넷 액세스 권한을 부여하려고 합니다.오직"호스트 전용" 네트워크 인터페이스(VirtualBox).

공식 문서에 따르면https://www.virtualbox.org/manual/ch06.html"호스트 전용" 네트워크 인터페이스를 사용하면 다음과 같은 "네트워크 모드"(액세스)가 있습니다...

VM  <-> Host     | YES
VM1 <-> VM2      | YES
VM   -> Internet | NO

하지만, 가지다많은인터넷 문서에는 호스트 시스템에서 다음 "트릭"/"해결 방법"(예)을 사용하여 게스트 시스템에서 인터넷에 액세스할 수 있다고 나와 있습니다("호스트 전용" 인터페이스만 사용).

sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1

나는 아주 많은 예를 테스트했습니다. 이것은 iptables.service내 호스트에서 잘 작동합니다내가 뭘 잘못했나요?

내 호스트는 Linux Manjaro(Linux Arch 기반)입니다.

감사합니다!

다음은 제가 언급한 "트릭"/"해결 방법"에 대한 정보 소스입니다.

http://archlinux.org.ru/forum/topic/2219/ http://nerdbynature.de/s9y/2015/06/09/VirtualBox-switching-to-Host-only-networking https://askubuntu.com/questions/293816/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in https://cuckoo.sh/docs/installation/host/routing.html https://downloads.cuckoosandbox.org/docs/installation/guest/network.html https://github.com/cuckoosandbox/cuckoo/issues/1376 https://jackal777.wordpress.com/2012/02/13/internet-access-in-virtualbox-host-only-networking/ https://kyrofa.com/posts/virtualbox-internet-access-with-host-only-network https://precisionsec.com/virtualbox-host-only-network-cuckoo-sandbox-0-4-2/ https://superuser.com/questions/1223801/virtualbox-nat-and-host-only-connection/1223853 Virtualbox NAT + 호스트 어댑터만 해당 https://www.howtogeek.com/howto/4922/week-in-geek-the-fixing-slow-internet-in-virtualbox-xp-guest-edition/ https://www.rffuste.com/tag/cuckoo/ https://www.virtualbox.org/manual/ch06.html

다음은 일부입니다.많은제가 테스트한 예는...

 > --------------------------------------------
sudo iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -P POSTROUTING ACCEPT
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv4.conf.all.proxy_arp=1
 < --------------------------------------------
 > --------------------------------------------
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -F
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
sudo iptables -A FORWARD -i <HOST_INTERFACE_WITH_INTERNET> -o vboxnet0 -j ACCEPT
sudo iptables -A FORWARD -i vboxnet0 -o <HOST_INTERFACE_WITH_INTERNET> -j ACCEPT
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A FORWARD -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1
 < --------------------------------------------
 > --------------------------------------------
sudo bash -c "printf \"net.ipv4.ip_forward = 1\nnet.ipv4.conf.all.proxy_arp = 1\n\" >> /etc/sysctl.conf"
sudo sysctl -p
sudo iptables -t filter -I FORWARD --in-interface vboxnet0 --out-interface <HOST_INTERFACE_WITH_INTERNET> --source 192.168.56.0/24 -j ACCEPT
sudo iptables -t filter -I FORWARD --in-interface <HOST_INTERFACE_WITH_INTERNET> --out-interface vboxnet0 --destination 192.168.56.0/24 -j ACCEPT
sudo iptables -t nat -I POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A POSTROUTING -o enp+ -t nat -j MASQUERADE
sudo iptables -A POSTROUTING -o wlp+ -t nat -j MASQUERADE
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -A PREROUTING -t mangle -i vboxnet+ -j MARK --set-mark 1
sudo iptables -A POSTROUTING -o enp+ -t nat -m mark --mark 1 -j MASQUERADE
sudo iptables -A POSTROUTING -o wlp+ -t nat -m mark --mark 1 -j MASQUERADE
 < --------------------------------------------
 > --------------------------------------------
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -s 192.168.56.0/24 -j MASQUERADE
sudo iptables -P FORWARD DROP
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -j ACCEPT
sudo iptables -A FORWARD -s 192.168.56.0/24 -d 192.168.56.0/24 -j ACCEPT
 < --------------------------------------------
 > --------------------------------------------
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -o <HOST_INTERFACE_WITH_INTERNET> -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
sudo iptables -I INPUT 1 -i vboxnet0 -j ACCEPT
 < --------------------------------------------
 > --------------------------------------------
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo sysctl -p /etc/sysctl.conf
sudo iptables -I FORWARD -i vboxnet0 -d 192.168.56.0/255.255.255.0 -j DROP
sudo iptables -A FORWARD -i vboxnet0 -s 192.168.56.0/255.255.255.0 -j ACCEPT
sudo iptables -A FORWARD -i <HOST_INTERFACE_WITH_INTERNET> -d 192.168.56.0/255.255.255.0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE
 < --------------------------------------------

답변1

  • 소개하다:

이것은 VirtualBox에서 단일 네트워크 인터페이스("호스트 전용")를 사용하여 게스트에서 "VM <-> 호스트", "VM1 <-> VM2" 및 "VM -> 인터넷"에 액세스하기 위한 전체 안내서입니다.

중요한:모든 명령을 "루트"로 실행합니다.

  • 에 실행   주인  :

노트:Manjaro(Arch 기반) 호스트를 템플릿으로 사용합니다. 다른 배포판을 조정하고 변경해야 할 수도 있습니다.

iptables 템플릿 구성 파일을 복사해야 합니다...

cp /etc/iptables/empty.rules /etc/iptables/iptables.rules

...그래서 "iptables.service"를 시작할 수 있습니다.

"iptables.service" 활성화 및 시작...

systemctl enable iptables.service
systemctl start iptables.service

IP 전달 활성화...

sysctl -w net.ipv4.ip_forward=1
printf "net.ipv4.ip_forward=1\n" >> /etc/sysctl.d/30-ipforward.conf

다음 iptables 규칙을 추가합니다. 그러면 호스트("vboxnet0")를 통해 패킷이 인터넷으로 전달됩니다.

템플릿 1:

iptables -t filter -I FORWARD --in-interface vboxnet0 --out-interface <HOST_INTERFACE_WITH_INTERNET> --source 192.168.56.0/24 -j ACCEPT
iptables -t filter -I FORWARD --in-interface <HOST_INTERFACE_WITH_INTERNET> --out-interface vboxnet0 --destination 192.168.56.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -o <HOST_INTERFACE_WITH_INTERNET> -j MASQUERADE

...또는다음 iptables 규칙을 추가하세요...

템플릿 2:

iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
iptables -P FORWARD ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

노트:"TEMPLATE II"에서는 호스트 인터페이스 이름( <HOST_INTERFACE_WITH_INTERNET>)과 VirtualBox 인터페이스 이름( vboxnet0)을 말할 필요가 없습니다. 이렇게 하면 인터넷이 있는 모든 호스트 인터페이스가 작동합니다. 즉, 인터넷이 있는 인터페이스가 변경될 때마다 이름을 조정할 필요가 없습니다. 유선 인터페이스(예: enp4s0f2)에서 무선 인터페이스(예: wlp3s0)로 또는 그 반대로 변경하는 경우를 예로 들 수 있습니다.

추가 질문:"TEMPLATE I"을 사용하면 어떤 이점이 있는지 모르기 때문에 "iptables"를 구성하는 두 가지 방법을 생각해 냈습니다. 어떤 충고?

힌트:인터넷으로 네트워크 인터페이스( )의 이름을 찾으려면 <HOST_INTERFACE_WITH_INTERNET>"ip a" 명령을 사용하십시오.

iptables 구성에 규칙을 저장하고 서비스를 다시 시작하십시오.

iptables-save > /etc/iptables/iptables.rules
systemctl restart iptables.service

호스트에서 "dnsmasq"를 활성화하고 시작합니다...

systemctl enable dnsmasq.service
systemctl start dnsmasq.service

노트:"dnsmasq"는 소규모 캐싱 DNS 프록시 및 DHCP/TFTP 서버입니다.

  • 에 실행   손님  :

노트:CentOS 7 게스트를 템플릿으로 사용합니다. 다른 배포판을 조정하고 변경해야 할 수도 있습니다.

모델에 따라 네트워크 인터페이스를 구성하십시오...

노트:네트워크 구성 파일은 "/etc/sysconfig/network-scripts/" 폴더 경로에 있습니다.

BOOTPROTO=static
DEVICE=<NETWORK_INTERFACE_NAME>
DNS1=<HOST-ONLY_HOST_IP>
GATEWAY=<HOST-ONLY_HOST_IP>
IPADDR=<HOST-ONLY_GUEST_IP>
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
USERCTL=NO
ZONE=

예를 들어. :

BOOTPROTO=static
DEVICE=eno16777736
DNS1=192.168.56.1
GATEWAY=192.168.56.1
IPADDR=192.168.56.101
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
USERCTL=NO
ZONE=

네트워크 서비스를 다시 시작합니다...

systemctl restart network.service

테스트하러 가세요...

curl http://www.google.com

이것은 모두입니다! =디

  • 인용하다:

https://jackal777.wordpress.com/2012/02/13/internet-access-in-virtualbox-host-only-networking/ https://askubuntu.com/questions/293816/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in https://kyrofa.com/posts/virtualbox-internet-access-with-host-only-network http://archlinux.org.ru/forum/topic/2219/ https://wiki.archlinux.org/index.php/Iptables https://wiki.archlinux.org/index.php/Internet_sharing

관련 정보