LINUX.ORG.RU
решено ФорумAdmin

Не работает NAT из qemu

 , , ,


1

1

Есть мост br7. В него добавлена сетевуха eth1-lan (10.0.0.253). От неё кабель в свитч. У виртуалок выставляется br7 как устройство моста. На виртуалках статика, например 10.0.0.68. Есть вин и лин машины. В systemd-networkd включен nat так:

[Match]
Name=eth1-lan     

[Network]
#DHCP=ipv4
Address=10.0.0.253/24
IPForward=yes     

# Smaller metric are preferred in route table. If multiple DHCP, use it here instead of route:     

[Route]
Destination=10.0.0.0/24
Metric=60
#GatewayOnLink=yes       

Есть сетевуха eth0-lan. Она обслуживает локалку, в которой обычные машины. И у неё тоже есть nat. Настроен аналогично вышеуказанному. Он работает.
Устройства из eth1-lan могут взаимодействовать с eth0-lan, как и планировалось. И nat был в eth1-lan тоже, но почему-то исчез… Из нововведений - установка VPN checkpoint, но даже с отключенным nat не появляется. И со сбросом правил фаервола. Стал смотреть wireshark-ом, выяснилась интересная особенность: Если делать с виртуальной машины ping 8.8.8.8, то запросы улетают на eth0-lan, т.е. на её mac (ну, пытаются. Но ответа не получают - no response found!). А не на mac eth1-lan. Вот вывод route -n с сервера:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         111.222.333.444 0.0.0.0         UG    10     0        0 eth2-wan
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0-lan
10.0.0.0        0.0.0.0         255.255.255.0   U     60     0        0 eth1-lan
prov.dns.ip.1      111.222.333.444 255.255.255.255 UGH   10     0        0 eth2-wan
prov.dns.ip.2      111.222.333.444 255.255.255.255 UGH   10     0        0 eth2-wan
my.white.network.ip  0.0.0.0         255.255.255.224 U     10     0        0 eth2-wan
111.222.333.444 0.0.0.0         255.255.255.255 UH    10     0        0 eth2-wan 

На клиентской виртуалке:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.253      0.0.0.0         UG    0      0        0 enp1s0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 enp1s0

Вывод brtcl:

bridge name	bridge id		STP enabled	interfaces
br7		8000.3250ffc4df38	no		eth1-lan
							vnet0
							vnet1
							vnet5

Куда копать, не подскажете? В virtualbox-e было проще, он умел цепляться к eth0-lan, и при этом не пропадал nat у локалки. Как и vmware.



Последнее исправление: c0unt0 (всего исправлений: 1)
Ответ на: комментарий от futurama

Чтобы был инет и локалка (общая) у виртуалок и реальных ПК. Если есть более элегантное решение - с удовольствием перейду на него )) Адреса у вирт. машин например 10.0.0.68, 10.0.0.126, 10.0.0.77. У реальных - до 60-ти по dhcp. Шлюз - 10.0.0.254 (eth0-lan), 10.0.0.253 (eth1-lan). Внешка - eth2-wan.
Сейчас для инета приходится прописывать им proxy (squid). Это не очень правильно.

c0unt0
() автор топика
Последнее исправление: c0unt0 (всего исправлений: 2)

Не знаю особенностей настройки systemd-networkd, но выглядит так что адрес 10.0.0.253 назначен для сетевого адаптера eth1-lan, а не для моста в который он включен, не очень понятно как оно, в таком случае, работает.

Второй сетевой адаптер для локальной сети не нужен, NAT нужен только для WAN.

No ★★
()
Ответ на: комментарий от c0unt0

Более элегантное решение – не использовать eth1-lan вообще. eth0-lan добавить в бридж br-lan. IP-адрес 10.0.0.254/24 удалить с eth0-lan и добавить на br-lan. br-lan использовать как устройство моста виртуалок. Адреса виртуалкам выдавать по DHCP, точно так же, как хостам в локалке:

                    +---------------------+
                    |        10.0.0.254/24|
(internet)-eth2-wan---[router]--[br-lan]----eth0-lan-(LAN)
                    |            |   |    |
                    |         vnet0 vnet1 |
                    |            |   |    |
                    |         [vm0] [vm1] |
                    +---------------------+

В терминах systemd-networkd:

# /etc/systemd/network/br-lan.netdev
[NetDev]
Name=br-lan
Kind=bridge
[Bridge]
STP=false
# /etc/systemd/network/br-lan.network
[Match]
Name=br-lan
[Network]
Address=10.0.0.254/24
IPv4Forwarding=yes
IPv6Forwarding=yes
DHCPServer=yes
# /etc/systemd/network/eth0-lan.network
[Match]
Name=eth0-lan
[Network]
Bridge=br-lan
# /etc/systemd/network/eth2-wan.network
[Match]
Name=eth2-wan
[Network]
IPMasquerade=ipv4
iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от iliyap

Спасибо )) Сохранил. Пока починил работающую систему, в дальнейшем подумаю о переходе на Вашу. Единственный плюс в моей - локальные пользователи не пострадают в случае каких-то проблем в настройках с виртуалками. Да и просто можно «дёрнуть рубильник» )))

c0unt0
() автор топика
Ответ на: комментарий от No

Сделал как Вы рекомендуете (ip убрал с сетевухи, повесил на мост). Пропала и локалка у виртуалок ))) Тогда сделал манёвр: поменял интерфейс «Устройство моста» в virt-manager на «Устройство macvtap». Там тоже можно указать br7. И всё полетело! Всем спасибо!

c0unt0
() автор топика
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0-lan
10.0.0.0        0.0.0.0         255.255.255.0   U     60     0        0 eth1-lan

Совершенно непонятно как это работает. Выбирается всё время маршрут с наименьшей метрикой, независимо от адреса назначения (т.е. via dev eth0-lan). Хотя по вашим словам до хостов 10.0.0.1-63 маршрут должен идти через eth0-lan, а до виртуалок 10.0.0.65-126 маршрут должен идти через br7.

iliyap ★★★★★
()
Ответ на: комментарий от iliyap

Сейчас уже так:

10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0-lan
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 br7

Но основная проблема была в типе интерфейса qemu. Почему - БГ его знает. Раньше работало.

c0unt0
() автор топика
Последнее исправление: c0unt0 (всего исправлений: 1)

Куда копать, не подскажете?

В сторону правильной постановки задачи. Что имеется, что надо получить. А пока получается месиво.

anonymous
()