Jak wspomniano w poprzednich odpowiedziach, rozwiązaniem tego problemu jest dodanie karty sieciowej macvlan na hoście. Jednak czułem, że ręczne przeinstalowanie tras do adaptera macvlan było trochę hacky, szczególnie, że chciałem obsługi IPv6 i ręcznie ustawione trasy mogą stać się problemem, gdy zmienia się prefiks. Oto moja konfiguracja, która pozostawia jądro kontrolujące tablicę routingu:
(Konkretna konfiguracja tutaj jest specyficzna dla Debiana i Upstart, ale podstawowe kroki powinny działać na każdym systemie GNU / Linux).
Tworzenie adaptera macvlan podczas uruchamiania
Najpierw musisz wybrać adres MAC karty. Możesz po prostu użyć losowego, ale sugeruję, aby ręcznie utworzyć adapter Macvlan i użyć jego MAC. W ten sposób MAC zobowiązuje się do wszelkich obowiązujących konwencji.
Zalecane jest ustawienie stałego adresu MAC, ponieważ w przeciwnym razie serwer DHCP nie będzie w stanie rozpoznać komputera po ponownym uruchomieniu i przypisać mu tego samego adresu IP co poprzednio.
Utwórz adapter i sprawdź MAC:
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
Podświetlony numer szesnastkowy to Twój adres MAC.
Teraz tworzysz skrypt inicjujący - który należy uruchomić przed zainicjowaniem pracy w sieci - aby utworzyć adapter macvlan przy każdym uruchomieniu. Polecenie to:
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
Przykładowy skrypt inicjujący Upstart w tym celu to:
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
Po prostu włóż to np /etc/init/macvlan.conf
.
Konfigurowanie konfiguracji sieci
W /etc/network/interfaces
ustaw fizyczną kartę sieciową na ręczną (ale pozostaw ją automatyczną) i przenieś jej poprzednią konfigurację (zazwyczaj DHCP lub statyczny adres IP) na kartę macvlan. Na przykład:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
Wyłączanie IPv6 dla adaptera fizycznego
Wreszcie nie chcesz, aby adapter fizyczny uzyskiwał adres IP. W przypadku IPv4 ustawienie adaptera na ręczne uniemożliwia uzyskanie adresu. Nie znalazłem jednak konfiguracji, która powstrzymywałaby jądro od uzyskiwania / przypisywania adresu IPv6 dla / do adaptera. Gdy to zrobi, dodaje również trasy dla nich, co może powodować problemy. Wydaje się więc, że najlepszym sposobem jest wyłączenie IPv6 dla adaptera fizycznego. Możesz to zrobić, dodając wiersz
net.ipv6.conf.eth0.disable_ipv6=1
do /etc/sysctl.conf
, tworząc plik w /etc/sysctl.d/
tym wierszu lub dodając
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
do twojego skryptu init.
Po ponownym uruchomieniu komputera komunikacja między hostem a gościem powinna działać zarówno z IPv4, jak i IPv6.
Należy pamiętać, że jeśli popełnisz błąd podczas konfigurowania, Twój host może stać się nieosiągalny przez sieć nawet po ponownym uruchomieniu. Zrób to tylko, jeśli masz fizyczny dostęp do maszyny lub istnieją inne zabezpieczenia, aby można było rozwiązać potencjalne problemy.