Як було сказано в попередніх відповідях, рішенням цієї проблеми є додавання мережевого адаптера macvlan на хост. Однак я відчув, що перенаправлення маршрутів до адаптера macvlan вручну було хитким, тим більше, що я хотів, щоб підтримка IPv6 та встановлені маршрути вручну могли стати проблемою, коли зміни префікса змінюються. Отже, ось моя конфігурація, яка залишає ядро в управлінні таблицею маршрутизації:
(Конкретна конфігурація тут специфічна для Debian і Upstart, але основні кроки повинні працювати в будь-якому GNU / Linux.)
Створення адаптера macvlan під час завантаження
Спочатку потрібно вибрати MAC-адресу для свого адаптера. Ви можете просто використовувати випадковий, але я пропоную вам вручну створити адаптер macvlan і використовувати його MAC. Таким чином, MAC зобов’язує будь-які конвенції, які там можуть бути.
Встановлення фіксованого MAC доцільно, оскільки в іншому випадку немає можливості, наприклад, DHCP-серверу розпізнати вашу машину після перезавантаження та призначити їй ту саму IP-адресу, що і раніше.
Тому створіть адаптер і знайдіть 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
...
Виділене шістнадцяткове число - це ваша MAC-адреса.
Тепер ви створюєте сценарій init - який потрібно запустити до того, як мережа буде ініціалізована - для створення адаптера macvlan при кожному запуску. Команда зробити це:
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
Прикладом для цього сценарію Upstart init буде:
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
Просто помістіть це, наприклад /etc/init/macvlan.conf
.
Налаштування мережевої конфігурації
В /etc/network/interfaces
, встановіть фізичний мережевий адаптер для ручної (але залишити її авто) і перемістити його попередню конфігурацію ( як правило , DHCP або статичний IP - адреса) для вашого macvlan адаптера. Наприклад:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
Відключення IPv6 для фізичного адаптера
Нарешті, ви не хочете, щоб фізичний адаптер отримував IP-адресу. Для IPv4 встановлення адаптера вручну не дозволяє йому отримати адресу. Однак я не знайшов конфігурацію, яка зупиняє ядро від отримання / призначення IPv6 адреси для / до адаптера. Коли це відбувається, він також додає маршрути для них, що може спричинити проблеми. Тому найкращим способом, здається, є відключення IPv6 для фізичного адаптера. Це можна зробити, додавши рядок
net.ipv6.conf.eth0.disable_ipv6=1
до /etc/sysctl.conf
, створивши файл /etc/sysctl.d/
із цього рядка або додавши його
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
до вашого сценарію init.
Коли ви перезавантажуєте комп'ютер, спілкування від хоста до гостя повинно працювати як з IPv4, так і з IPv6.
Пам’ятайте, що якщо ви зробите помилку під час налаштування, ваш хост може стати недоступним через мережу навіть після перезавантаження. Робіть це лише в тому випадку, якщо у вас є фізичний доступ до машини або інші гарантії, щоб ви могли усунути потенційні проблеми.