Iptables

VirtualBox - 帶有網際網路的“僅限主機”

  • August 7, 2017

好的朋友們!這次我真的很感激一些幫助!=|

我正在使用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" &gt;&gt; /etc/sysctl.d/30-ipforward.conf

添加以下 iptables 規則。這將通過主機(“vboxnet0”)將數據包轉發到網際網路……

模板一:

iptables -t filter -I FORWARD --in-interface vboxnet0 --out-interface &lt;HOST_INTERFACE_WITH_INTERNET&gt; --source 192.168.56.0/24 -j ACCEPT
iptables -t filter -I FORWARD --in-interface &lt;HOST_INTERFACE_WITH_INTERNET&gt; --out-interface vboxnet0 --destination 192.168.56.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -o &lt;HOST_INTERFACE_WITH_INTERNET&gt; -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”上,您不需要告知主機介面的名稱 ( &lt;HOST_INTERFACE_WITH_INTERNET&gt;) 和 VirtualBox 介面的名稱 ( vboxnet0)。這樣,任何有網際網路的主機介面都可以工作,也就是說,我不必在有網際網路的介面發生變化時調整它的名稱。例如,當我們從有線介面(例如:enp4s0f2)更改為無線介面(例如:wlp3s0)時,反之亦然。

**進一步的問題:**我提出了兩種配置“iptables”的方法,因為我不知道使用“TEMPLATE I”是否有任何優勢。任何意見?

**提示:**要找出&lt;HOST_INTERFACE_WITH_INTERNET&gt;具有 Internet 的網路介面 ( ) 的名稱,請使用“ip a”命令。

將規則保存到 iptables 配置並重新啟動服務…

iptables-save &gt; /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=&lt;NETWORK_INTERFACE_NAME&gt;
DNS1=&lt;HOST-ONLY_HOST_IP&gt;
GATEWAY=&lt;HOST-ONLY_HOST_IP&gt;
IPADDR=&lt;HOST-ONLY_GUEST_IP&gt;
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

引用自:https://unix.stackexchange.com/questions/383791