2

Ладно друзья! Я был бы очень признателен за помощь в этот раз! = |

Я использую виртуализатор 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/интернет-доступ-в-виртуалке-только-хост-сеть / https://kyrofa.com/posts/virtualbox-internet-access-with-host-only-network https://precisionsec.com/virtualbox- host-only-network-cuckoo-sandbox-0-4-2/ Virtualbox NAT и соединение только с хостом https://unix.stackexchange.com/questions/74663/virtualbox-nat-host-only-adapter 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 ответ1

2

ВСТУПЛЕНИЕ

Это полное руководство, чтобы иметь доступ "VM <-> Host", "VM1 <-> VM2" и "VM -> Internet" на гостях, используя единый сетевой интерфейс ("только для хоста") на VirtualBox.

ВАЖНО: Запустите все команды как "root".

ВЫПОЛНИТЬ НА ХОСТ

ПРИМЕЧАНИЕ. Мы используем хост Manjaro (на основе Arch) в качестве шаблона. Вам могут потребоваться корректировки и изменения в других дистрибутивах.

Вам нужно скопировать файл конфигурации шаблона iptables ...

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

... так что вы можете запустить "iptables.service".

Включите и запустите "iptables.service" ...

$ systemctl enable --now 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") и в Интернет ...

ШАБЛОН I
$ 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 ...

ШАБЛОН II
$ 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", потому что я не знаю, есть ли какое-либо преимущество в использовании "ШАБЛОНА I". Любой комментарий?

СОВЕТ. Чтобы узнать имя сетевого интерфейса (<HOST_INTERFACE_WITH_INTERNET>), имеющего Интернет, используйте команду "ip a".

Сохраните правила в конфигурации iptables и перезапустите службу ...

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

Включите и запустите "dnsmasq" на хосте ...

$ systemctl enable --now 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

ССЫЛКА

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .