Я могу получить доступ к хосту через 213.xxx.xxx.1
назначен br0:1
но ВМ с 213.xxx.xxx.2
(интерфейс моста на br0:1
) не работает.
Мне нужно создать еще один мостовой интерфейс для второй подсети, но тогда bond0
уже связано с br0
?!
В принципе, как я могу использовать вторую подсеть для виртуальных машин в этом сценарии?
Подсети:
213.xxx.xxx.176/28
213.xxx.xxx.0/27 routed via 213.xxx.xx.180
Настроить:
em [1-2]
# cat /etc/sysconfig/network-scripts/ifcfg-em[1-2]
DEVICE="em[1-2]"
NAME="bond0-slave[1-2]"
BOOTPROTO="none"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
USERCTL=no
IPV6INIT=no
PEERDNS=no
MASTER=bond0
SLAVE=yes
облигация0
# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE="bond0"
NAME="bond0"
BOOTPROTO="none"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bond"
USERCTL="no"
IPV6INIT="no"
PEERDNS="no"
BONDING_OPTS="mode=active-backup miimon=100"
BRIDGE=br0
br0
# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
NAME="br0"
BOOTPROTO="none"
IPADDR="213.xxx.xxx.180"
GATEWAY="213.xxx.xxx.177"
NETMASK="255.255.255.240"
BROADCAST="213.xxx.xxx.191"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"
USERCTL="no"
IPV6INIT="no"
PEERDNS="no"
br0: 1
# cat /etc/sysconfig/network-scripts/ifcfg-br0:1
DEVICE="br0:1"
NAME="br0:1"
BOOTPROTO="none"
IPADDR="213.xxx.xxx.1"
NETMASK="255.255.255.224"
BROADCAST="213.xxx.xxx.31"
NM_CONTROLLED="yes"
#ONBOOT="yes"
TYPE="Bridge"
USERCTL="no"
IPV6INIT="no"
PEERDNS="no"
ONPARENT="yes"
Обновление среда, 18 января, 16:25:17 GMT 2017:
<interface type='bridge'>
<mac address='52:54:00:4c:4f:27'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Обновление вторник, 24 января, 11:44:21 GMT 2017:
Настройка сети ВМ:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="213.xxx.xxx.2"
PREFIX="27"
GATEWAY="213.xxx.xxx.177" <-- not sure if this should be 213.xxx.xxx.180 instead?!
IPTables на хосте:
# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68
# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
RETURN all -- 192.168.122.0/24 224.0.0.0/24
RETURN all -- 192.168.122.0/24 255.255.255.255
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
Он работает, когда я устанавливаю шлюз по умолчанию на 213.xxx.xxx.1 на виртуальной машине (IP от br0: 1 на хосте) - не уверен, почему я не могу просто использовать тот же шлюз по умолчанию, как хост (213.xxx.xxx .177).
Мне также пришлось очистить IPTables, поэтому мне нужно выяснить, какие правила необходимы.
Я также получаю перенаправление при пинге с виртуальной машины, поэтому не уверен, оптимальна ли эта конфигурация:
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 213.xxx.xxx.1: icmp_seq=1 Redirect Host(New nexthop: 213.xxx.xxx.177)
From 213.xxx.xxx.1 icmp_seq=1 Redirect Host(New nexthop: 213.xxx.xxx.177)
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=7.26 ms
...
Обновление вторник, 24 января, 14:49:43 GMT 2017:
Я не уверен, почему IPTables на самом деле фильтрует пакеты, проходящие через мост, даже если br_netfilter
модуль не загружен
# lsmod | grep "br_netfilter"; echo $?
1
# test -d /proc/sys/net/bridge; echo $?
1
Это правило тоже не помогло:
# iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
Из Википедии:
Шлюз по умолчанию в компьютерных сетях - это узел, который, как предполагается, знает, как пересылать пакеты в другие сети.
Это означает, что узел шлюза должен быть узлом в сети или подсети. Вы используете две подсети на одном интерфейсе br0
213.xxx.xxx.0/27
и 213.xxx.xxx.176/28
.
Есть шлюз 213.xxx.xxx.177
в сети 213.xxx.xxx.176/28
. И ваш хост-сервер получает доступ в Интернет через этот шлюз. Я думаю шлюз 213.xxx.xxx.177
является маршрутизатором, и этот маршрутизатор не является членом (узлом) подсети 213.xxx.xxx.0/27
. Но он знает, что подсеть 213.xxx.xxx.0/27
доступен через узел 213.xxx.xxx.180
(ваш хост-сервер).
У вашей виртуальной машины неправильный адрес шлюза. Если у ВМ есть IP-адрес 213.xxx.xxx.2/27
тогда виртуальная машина должна иметь адрес шлюза из той же подсети 213.xxx.xxx.0/27
. Поэтому у ВМ должен быть адрес шлюза. 213.xxx.xxx.1
, ведь ваш хост-сервер имеет вторичный IP-адрес на br0
интерфейс.
Если вы создадите виртуальную машину в подсети 213.xxx.xxx.176/28
вы должны назначить тот же IP шлюза 213.xxx.xxx.177
на нем как на вашем хост-сервере. Убедитесь, что этот ip где-то не используется.
К тому же:
Очистите все правила iptables, как описано на Вот
Перед тем как это сделать, необходимо запустить службу iptables. После очистки перезапустите службу iptables, чтобы сохранить очищенные правила на диске.
Решение, которое «отвечает на вопрос»:
cat /proc/sys/net/ipv4/ip_forward
не 1, посмотрите на этом сайте, как его изменитьiptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
выглядит хорошо. В конце концов поменять на что-нибудь ссылку iptables -I FORWARD -s 213.xxx.xxx.0/27 -j ACCEPT
(это означает: принимать весь трафик из сети vms в другую сеть)Идея этого решения состоит в том, чтобы использовать ваш хост в качестве шлюза для сети vm. Очевидно, что если у вас уже есть другой шлюз в сети 213.x.x.0 (213.xxx.xx.180), вы можете использовать его прямо со своей виртуальной машины.
Предлагаемая конфигурация iptables разрешит трафик от виртуальных машин вовне. Если вы хотите разрешить подключения извне к виртуальным машинам, вы должны ввести правило, подобное iptables -I FORWARD -d 213.xxx.xxx.0/27 -j ACCEPT
Рекомендуемое решение: имейте в виду, что все это, вероятно, просто беспорядок из-за того, как задается вопрос. В реальном мире, если у вас есть маршрутизатор / брандмауэр, который управляет двумя вашими подсетями, вам следует выбрать простой способ: - у маршрутизатора / брандмауэра будет IP-адрес в каждой подсети. Это будет шлюз для всех хостов в подсетях - назначьте vlan для каждой подсети - на вашем хосте у вас будет 2 интерфейса и мосты - ваша виртуальная машина будет подключена к «подсети vms» и будет использовать брандмауэр в качестве шлюза.
Таким образом, у вас не будет сумасшедшей конфигурации iptables / alias / forwarding. У вас будет несколько хостов в одной подсети, а другие - в другой, а на вашем брандмауэре настроена маршрутизация / acls / nats. Вы даже не должны назначать своему хосту IP-адрес в "сети vm".
Слияние двух сетей в одном широковещательном домене является источником проблем, и следует избегать настройки нескольких IP-адресов на хосте, если вы не очень уверены в конфигурации сети.