Гид по технологиям

Как включить сеть в Xen‑гостях на серверах Hetzner DS (Debian Etch)

• 5 min read • Инфраструктура • Обновлено 21 Nov 2025
Сеть в Xen‑гостях на Hetzner DS (Debian Etch)
Сеть в Xen‑гостях на Hetzner DS (Debian Etch)

О чём эта инструкция

Здесь показано, как перевести Xen‑гостя (domU) в routed‑режим на Hetzner DS‑сервере под Debian Etch. Hetzner часто выдаёт дополнительный подсеть IP, отличную от сети основного IP сервера. Эти дополнительные адреса «привязаны» к MAC адресу хоста (dom0), поэтому пакет от неизвестного MAC будет отброшен на маршрутизаторе. Решение — настроить dom0 как шлюз для гостей.

Важно: автор не даёт никаких гарантий, что инструкция сработает в вашей среде. Применяйте с осторожностью и делайте резервные копии конфигураций.

Основные предпосылки

  • Сервер работает под Debian Etch с установленным Xen. Предполагается, что изначально был настроен bridge.
  • У вас есть доступ к dom0 (root) и к domU консоли.
  • У вас есть дополнительные IP/подсеть от Hetzner.
  • На госте установлен пакет ethtool (apt‑get install ethtool).

Краткое описание сетевого окружения в примере (используется далее по тексту):

  • IP dom0: 88.198.70.47
  • Gateway (для dom0): 88.198.70.33
  • Netmask dom0: 255.255.255.224
  • Доп. подсеть: 78.47.159.32/255.255.255.240 (доступные: .33–.46)
  • IP для гостя (domU): 78.47.159.44

1 Подготовка: проверьте текущую конфигурацию

На dom0 просмотрите /etc/network/interfaces:

cat /etc/network/interfaces

В примере конфигурация выглядела так:

### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto eth0
iface eth0 inet static
  address 88.198.70.47
  broadcast 88.198.70.63
  netmask 255.255.255.224
  gateway 88.198.70.33

# default route to access subnet
up route add -net 88.198.70.32 netmask 255.255.255.224 gw 88.198.70.33 eth0

На domU (госте) /etc/network/interfaces изначально может содержать адрес из дополнительного подсети и шлюз, равный .33:

cat /etc/network/interfaces
# The primary network interface
auto eth0
iface eth0 inet static
 address 78.47.159.44
 gateway 78.47.159.33
 netmask 255.255.255.240

 up route add -net 78.47.159.32 netmask 255.255.255.240 gw 78.47.159.33 eth0

Прежде чем идти дальше, убедитесь, что на госте установлен ethtool:

apt-get install ethtool

2 Конфигурация хоста (dom0)

  1. Сделайте резервную копию /etc/network/interfaces:
cd /etc/network
cp interfaces interfaces.old
  1. Отредактируйте /etc/network/interfaces. Для routed режима нужно убрать broadcast и route add, а netmask поставить 255.255.255.255, добавить pointopoint на адрес шлюза. Пример итогового вида:
vi /etc/network/interfaces
### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto eth0
iface eth0 inet static
  address 88.198.70.47
  netmask 255.255.255.255
  gateway 88.198.70.33
  pointopoint 88.198.70.33

Важно: netmask должен быть 255.255.255.255, и используется параметр pointopoint с IP шлюза Hetzner.

  1. Сделайте резервные копии конфигураций Xen и скрипта vif:
cd /etc/xen
cp xend-config.sxp xend-config.sxp.old
cd scripts
cp vif-common.sh vif-common.sh.old
  1. Измените /etc/xen/xend-config.sxp: закомментируйте network-bridge/vif-bridge и включите network-route/vif-route:
vi /etc/xen/xend-config.sxp
[...]
#(network-script network-bridge)
#(vif-script vif-bridge)
(network-script network-route)
(vif-script     vif-route)
[...]
  1. Включите форвардинг и proxy ARP в /etc/sysctl.conf. Убедитесь в наличии строк:
vi /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.default.proxy_arp=1

Примените изменения:

sysctl -p
  1. Внесите правку в /etc/xen/scripts/vif-common.sh — функцию ip_of():
vi /etc/xen/scripts/vif-common.sh

Найдите функцию ip_of и замените старую команду парсинга IP на более надёжную:

function ip_of()
{
  #ip addr show "$1" | awk "/^.*inet.*$1$/ {print \$2}" | sed -n '1 s,/.*,,p'
  ip -4 -o addr show primary dev $1 | awk '$3 == "inet" {print $4; exit}' | sed 's#/.*##'
}
  1. Перезагрузите dom0:
reboot

3 Запуск гостя и настройка domU

После перезагрузки dom0 создайте или запустите гостя:

xm create /etc/xen/vm.example.com.cfg

Подключитесь к консоли гостя:

xm console vm.example.com

В госте сделайте резервную копию /etc/network/interfaces и отредактируйте её:

cd /etc/network
cp interfaces interfaces.old
vi /etc/network/interfaces

Пример корректной конфигурации для routed режима:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
 address 78.47.159.44
 gateway 88.198.70.47
 netmask 255.255.255.255
 pointopoint 88.198.70.47
 post-up ethtool -K eth0 tx off

Ключевые отличия:

  • gateway — IP домашней машины dom0 (88.198.70.47), а не адрес маршрутизатора Hetzner (.33).
  • netmask = 255.255.255.255
  • pointopoint указывает на IP dom0
  • post-up ethtool отключает аппаратную проверку TCP‑чексума (рекомендуется при проблемах передачи)

После сохранения перезагрузите гостя с dom0:

xm reboot vm.example.com

Проверьте доступность гостя извне и внутри:

  • на dom0: ping 78.47.159.44
  • в domU: ping 8.8.8.8, traceroute до внешнего хоста

4 Проверка и отладка

Полезные команды и проверки:

  • Просмотр IP на интерфейсах:
ip -4 addr show
  • Проверка маршрутов:
ip route show
  • Проверка, что форвардинг включён:
sysctl net.ipv4.ip_forward
  • Просмотр ARP‑таблицы и proxy ARP:
arp -n
ip neigh show
cat /proc/sys/net/ipv4/conf/all/proxy_arp
  • Сниффинг трафика для диагностики:
tcpdump -i eth0 host 78.47.159.44
  • Если сетевые пакеты не проходят, проверьте iptables/фильтры на dom0 и внешние списки контроля MAC у провайдера.

Распространённые ошибки и их признаки:

  • Неверный gateway в domU — пакеты идут на .33 и теряются.
  • Остался bridge в конфиге Xen — domU не использует dom0 как маршрутизатор.
  • Отсутствует net.ipv4.ip_forward=1 — дом0 не маршрутизирует.
  • Неправильный netmask — ожидайте подсеть /32 (255.255.255.255).

5 Когда этот способ не подойдёт

  • Если Hetzner требует, чтобы дополнительный IP использовал MAC гостя — но обычно они привязывают IP к MAC dom0. В таком редком случае routed‑режим не поможет.
  • Если вы не можете изменить конфигурацию dom0 (например, управляете только гостем) — то этот метод неприменим.
  • Если у вас несколько публичных подсетей с особыми правилами маршрутизации у провайдера — согласуйте с поддержкой Hetzner.

Альтернативные подходы

  • NAT: настроить SNAT/MASQUERADE на dom0, чтобы пакеты от гостей шли под MAC/адресом dom0. Это быстро, но портит видимость гостя извне.
  • Проксирование/туннелирование: настроить VPN/ туннель между сервером и конечной точкой — полезно для более сложных сетевых архитектур.
  • Обратиться в поддержку Hetzner и запросить изменение привязки MAC или дополнительные инструкции.

Короткий SOP (шаги для выполнения)

  1. Резервные копии: /etc/network/interfaces, /etc/xen/xend-config.sxp, /etc/xen/scripts/vif-common.sh
  2. Изменить /etc/network/interfaces на dom0: netmask /32, pointopoint, убрать broadcast/route add
  3. В /etc/xen/xend-config.sxp включить network-route/vif-route
  4. Включить ip_forward и proxy_arp в /etc/sysctl.conf и выполнить sysctl -p
  5. Исправить функцию ip_of в vif-common.sh
  6. Перезагрузить dom0
  7. На domU: прописать gateway = dom0, netmask /32, pointopoint = dom0, post-up ethtool
  8. Перезагрузить гостя и тестировать

Контрольный список для администратора

  • Сделаны резервные копии конфигураций
  • dom0 имеет netmask 255.255.255.255 и pointopoint
  • В xend-config.sxp активирован network-route
  • sysctl: ip_forward=1, proxy_arp=1
  • vif-common.sh обновлён
  • domU: gateway = IP dom0, netmask = /32, pointopoint = IP dom0
  • Проверен доступ к гостю извне и маршрутизация из гостя

Критерии приёмки

  • Гость отвечает на ping извне по выделенному IP.
  • Из гостя доступны внешние адреса (ping/traceroute).
  • На dom0 видны proxy ARP записи и форвардинг пакетов.

Быстрая памятка (cheat sheet)

  • dom0 netmask: 255.255.255.255
  • domU netmask: 255.255.255.255
  • domU gateway: IP dom0
  • Включить net.ipv4.ip_forward и net.ipv4.conf.default.proxy_arp
  • В xend-config.sxp использовать network-route/vif-route

Заключение

Переключение Xen в routed‑режим на Hetzner DS — надёжный способ работать с дополнительными подсетями IP, когда провайдер «привязывает» IP к MAC хоста. Следуя шагам выше и выполняя проверки, вы сможете сделать dom0 шлюзом для domU и обеспечить доступность гостей в сети.

Полезные ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро