У меня есть две виртуальные виртуальные машины. U1 и U2

VM U1 имеет два адаптера: enp0s3, который соединен с моим беспроводным адаптером на моей хост-машине, и enp0s8, который подключен к внутренней сети с именем "inet". Кроме того, я также использую сервер DHCP на интерфейсе enp0s8. Я также настраиваю статический IP-адрес для интерфейса enp0s8 U1, используя файл /etc /network /interfaces

VM U2 имеет один адаптер, enp0s3, который подключен к внутренней сети с именем "inet".

Теперь, когда я раскручиваю U1, а затем U2 и делаю

ping <u1_enp0s8_ip_address> из U2 Я получаю ответ обратно

Однако, когда я пытаюсь

ping <u1_enp0s3_ip_address> от U2, нет ответа

Также я попробовал

ping -I enp0s8 <u1_enp0s3_ip_address> в U1, и ответа нет.

Что мне нужно сделать, чтобы enp0s8 на U1 мог общаться с enp0s3 на U1?

Любые предложения / ответы будут высоко оценены. Я застрял на этом пару дней.

(РЕДАКТИРОВАТЬ 1)

Вывод команды sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

(РЕДАКТИРОВАТЬ 2)

Вывод команды sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

(Изменить 3)

Вывод команды route -n

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 enp0s3
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 enp0s8
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp0s8
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s3

Сеть enp0s3 (внешний сетевой интерфейс) - 192.168.0.0/24, а сеть enp0s8 (внутренний сетевой интерфейс) - 10.0.1.0/24.

Вывод команды sysctl net.ipv4.ip_forward

sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

С уважением

2 ответа2

1

Включить пересылку на U1. Большинство ОС по умолчанию не выполняют маршрутизацию от интерфейса к интерфейсу, если вы явно не укажете им.

Просмотрите правила брандмауэра на уровне ОС на U1. Не забудь и nat стол.

1

На U1 вам нужно либо настроить NAT для внутренней сети, либо открыть его и просто пересылать пакеты. Если вы выберете второе, вам нужно будет установить соответствующие маршруты на любых машинах в вашей физической локальной сети, которые вы хотите подключить к виртуальной локальной сети.

Если вы хотите настроить NAT, вам нужно включить пересылку пакетов и настроить некоторые правила iptables . Вот скрипт, который я использую, который делает это -

#!/bin/bash
# a very simple set of iptables commands 
# to allow forwarding between ethernet
# devices


# which device is the one that connects to The World (or at least your
# non virtual LAN - this would be a Bridged or NAT (not NAT Network) type
# in VirtualBox
WAN_DEVICE="enp0s3"

# which device is the one that connects to Internal Only or Host Only network?
LAN_DEVICE="enp0s8"


# enable forwarding
 echo 1 > /proc/sys/net/ipv4/ip_forward

# where is iptables located?
iptables=`which iptables`

# flush all existing rules
$iptables -F

# this is for NAT
# enable masquerading
$iptables -t nat -A POSTROUTING -o $WAN_DEVICE -j MASQUERADE

# don't forward packets from off-lan to lan if
# they are a brand new connection being formed
$iptables -A FORWARD -i $WAN_DEVICE -o $LAN_DEVICE -m state --state NEW -j REJECT

# if the packets come from off-lan but they are
# related to a connection that was established from
# within the lan, go ahead and forward them
$iptables -A FORWARD -i $WAN_DEVICE -o $LAN_DEVICE -m state --state RELATED,ESTABLISHED -j ACCEPT

# whatever traffic comes from the lan to go to
# the world allow thru
$iptables -A FORWARD -i $LAN_DEVICE -o $WAN_DEVICE -j ACCEPT

После этого ваши iptables должны выглядеть

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere             state NEW reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Чтобы открыть его, это немного излишне, но вы можете просто изменить приведенные выше правила, чтобы принимать все соединения и перенаправлять вход / выход на обоих интерфейсах. Делая это, вы также удаляете команду NAT / Masquerade, НО вам нужно будет установить маршруты на любой машине, которую вы хотите подключить из физической ЛВС в виртуальную. Просто закомментируйте другие вызовы $iptables (кроме флеш-вызова) и продублируйте последнюю строку с обращенными ссылками на устройства, что уменьшит сценарий до -

#!/bin/bash
# a very simple set of iptables commands 
# to allow forwarding between ethernet
# devices


# which device is the one that connects to The World (or at least your
# non virtual LAN - this would be a Bridged or NAT (not NAT Network) type
# in VirtualBox
WAN_DEVICE="enp0s3"

# which device is the one that connects to Internal Only network?
LAN_DEVICE="enp0s8"


# enable forwarding
 echo 1 > /proc/sys/net/ipv4/ip_forward

# where is iptables located?
iptables=`which iptables`

# flush all existing rules
$iptables -F

# whatever traffic comes from the lan to go to
# the world allow thru
$iptables -A FORWARD -i $LAN_DEVICE -o $WAN_DEVICE -j ACCEPT

# whatever traffic comes from the world to go to
# the lan allow thru
$iptables -A FORWARD -i $WAN_DEVICE -o $LAN_DEVICE -j ACCEPT

После этого ваш iptables должен выглядеть

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

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