[EDYTOWAĆ]
System produkcyjny jest obecnie mieszanym systemem fizycznym i opartym na ESXi. Oczywiście nigdy nie używalibyśmy virtualboksa nawet w środowisku przedprodukcyjnym! Został użyty tutaj tylko do szybkiego zawężenia problemu bezpośrednio na moim pulpicie.
Dziękujemy za wyjaśnienie „wstrzymania” na meta!
[/EDYTOWAĆ]
Moja konfiguracja:
- Sieć prywatna
vboxnet1
10.0.7.0/24 - 1 Host, pulpit Ubuntu
- 1 VM, serwer Ubuntu (VirtualBox)
Układ adresowania:
- HOST: 10.0.7.1
- VM: 10.0.7.101
- VM NAMESPACE : 10.0.7.102
Na VM
pobiegłem następujące polecenia:
ip netns add mac # create a new nmespace
ip link add link eth0 mac0 type macvlan # create a new macvlan interface
ip link set mac0 netns mac
W mac
przestrzeni nazw wewnątrz maszyny wirtualnej:
ip link set lo up
ip link set mac up
ip addr add 10.0.7.102/24 dev mac0
Więc w zasadzie kończymy na: (jak Inception?)
+------------------------+
| Host: 10.0.7.1 |
| |
| +--------------------+ |
| | VM: 10.0.7.101 | |
| | | |
| | +----------------+ | |
| | | NS: 10.0.7.102 | | |
| | | | | |
| | +----------------+ | |
| +--------------------+ |
+------------------------+
Co działa:
- Ping pomiędzy
Host
iVM
- Ping pomiędzy
NS
iNS
- dhclient z
NS
Co nie działa:
- ping pomiędzy
NS
iVM
- ping pomiędzy
NS
iHost
Gdzie zacząłem wariować:
- tcpdump on
host
(prawdziwa maszyna) faktycznie pokazuje żądanie ARP ORAZ odpowiedzi - tcpdump on
NS
pokazuje żądania ARP wysłane do hosta - tcpdump on
VM
sprawia, że cały bałagan działa (!) -> ping zaczyna otrzymywać odpowiedzi, gdy tcpdump jest uruchamiany na maszynie wirtualnej?!?
Więc założę się, że byłeś chętny, moje pytanie brzmi: jak sprawić, by działało? Podejrzewam, że coś jest nie tak z ARP na macvlan w NS, ale nie mogę zrozumieć, co dokładnie ...
Przy okazji zrobiłem te same eksperymenty z mac0
interfejsem bezpośrednio na maszynie wirtualnej (bez przestrzeni nazw) i działało bezbłędnie.
źródło
Odpowiedzi:
OK, więc dla potomności fakt, że tcpdump sprawia, że nagle wszystko działa, powinien był mnie nakłonić. To, co robi wewnętrznie, to przejście
eth0
do trybu rozwiązłego. Oznacza to,eth0
że da cały ruch sieciowy, nie tylko ten z głównym serweremMAC
Jednak właśnie tak
macvlan
działa: dodaje nowy dodatkowy wirtualny adres MAC, którego karta sieciowa „fizyczna” (czyli VM) nie zna.Zatem łatwym obejściem jest ręczne:
ifconfig eth0 promisc
Mam nadzieję, że to pomoże !
źródło