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 + Host-Only 適配器 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 < --------------------------------------------
- 介紹:
這是一個完整的指南,可以使用 VirtualBox 上的單個網路介面(“僅主機”)在來賓上訪問“VM <-> 主機”、“VM1 <-> VM2”和“VM -> Internet”。
**重要提示:**以“root”身份執行所有命令。
- 在主機上執行 :
**注意:**我們使用 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”)將數據包轉發到網際網路……
模板一:
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 規則…
模板二:
iptables -t nat -I POSTROUTING -s 192.168.56.0/24 -j MASQUERADE iptables -P FORWARD ACCEPT iptables -t nat -P POSTROUTING ACCEPT
**注意:**在“模板 II”上,您不需要告知主機介面的名稱 (
<HOST_INTERFACE_WITH_INTERNET>
) 和 VirtualBox 介面的名稱 (vboxnet0
)。這樣,任何有網際網路的主機介面都可以工作,也就是說,我不必在有網際網路的介面發生變化時調整它的名稱。例如,當我們從有線介面(例如:enp4s0f2)更改為無線介面(例如:wlp3s0)時,反之亦然。**進一步的問題:**我提出了兩種配置“iptables”的方法,因為我不知道使用“TEMPLATE I”是否有任何優勢。任何意見?
**提示:**要找出
<HOST_INTERFACE_WITH_INTERNET>
具有 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
這就是所有的人!=D
- 參考:
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