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-c​​an-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 - >インターネット」にアクセスするための完全なガイドです。

重要:すべてのコマンドを「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」)を介してパケットがインターネットに転送されます。

テンプレート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」を構成する2つの方法を考えました。どんなアドバイス?

ヒント:インターネット上のネットワークインタフェース()の名前を見つけるには、<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

これはすべてです! =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-c​​an-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

関連情報