2

Я провел последние несколько дней, пытаясь заставить это работать, но в нижней части этого поста есть либо расплывчатые, либо устаревшие руководства. Я добавил ссылки на некоторые из руководств, которым я пытался следовать. У меня есть выделенная машина в hetzner, и я хочу настроить виртуализацию. Я могу создать виртуальную машину без проблем. У меня проблема с сетью, в сети hetzner вы не можете использовать простой мост, потому что они направляют любые дополнительные подсети на ваши хосты. Main ip и не будет принимать пакеты, если MAC-адрес не соответствует хост-машине.

Я понял, что мне нужно использовать маршрутизируемые сети для маршрутизации моей подсети через соединение eth0, которое я пробовал снова и снова, и я никогда не смогу заставить работать сеть, я никогда не смогу получить доступ из своего vm, даже к dom0, я Обычно я могу зайти на сервер с адреса, который я назначил ему с dom0. Я запустил tcpdump, и ping-пакеты достигают dom0, когда они предназначены не для domU, а просто останавливаются и не попадают в domU.

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

Я использую операционные системы на основе Debian и инструмент xl, так как я в основном использую Debian Jessie. Я хочу, чтобы ОС находилась в пределах разумного диапазона поддержки для обновлений безопасности. Я также пробовал Ubuntu с 14.04 и выше. Я думаю, что проблема заключается в настройке файла интерфейса, но я не знаю, что не так.

Любая помощь приветствуется

Направленная XEN VM на основе LVM
Hetzner Xen Подсеть IPv4 + Подсеть IPv6
Настройка XEN на выделенном сервере Hetzner
Настройка Ubuntu 12.04 и Xen на Hetzner

1 ответ1

2

Конфигурация сети виртуальной машины для маршрутизируемого режима на серверах Hetzner, OVH и Online.net противоречит интуиции, поскольку у вас есть сети, которые похожи на это:

Host IP:       192.168.0.2
Host Netmask:  255.255.255.0 (/24)
Host Gateway:  192.168.0.1

Guest IP:      10.0.0.1
Guest Netmask: 255.255.255.255 (/32)
Guest Gateway: 192.168.0.1
Guest MAC:     02:00:00:01:02:03

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

А? Какие? Как вы можете иметь подсеть только из одного IP-адреса (10.0.0.1/32)? Там нет места для ворот! Почему шлюз находится в другой подсети (192.168.0.0/24)?

Вот вопросы, которые заставляют Linux и Windows не проходить проверку работоспособности сети, поскольку сети для них не имеют смысла. Они думают, что ворота будут недоступны.

Hetzner, OVH и Online.net используют некоторые хитрости в сети, которые делают шлюз доступным в любом случае.

К счастью, как в Linux, так и в Windows вы можете переопределить проверки работоспособности и установить вышеуказанную конфигурацию интерфейса.


Возможные решения

Статическая адресация

Это проще всего сделать. Большая часть конфигурации, которую вам нужно сделать на хосте, - это создать мост.

хозяин

В Debian/Ubuntu, если ваш интерфейс управления / Интернет - это eth0 , вы можете отредактировать /etc/network/interfaces чтобы иметь мост br0 следующим образом:

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.2   # Host IP
        netmask 255.255.255.0 # Host Netmask
        gateway 192.168.0.1   # Host Gateway
        metric 0
        bridge_ports eth0
        bridge_stp on
        bridge_fd 0
        bridge_maxwait 0

Запустите sudo service networking restart чтобы сетевая конфигурация начала действовать.

В RHEL/CentOS, если ваш интерфейс управления / Интернет - это eth0 , вы можете отредактировать /etc/sysconfig/network-scripts/ifcfg-eth0 для использования моста br0 следующим образом:

TYPE="Ethernet"
BOOTPROTO="none"
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
BRIDGE="br0"

Затем создайте новый файл /etc/sysconfig/network-scripts/ifcfg-br0 для настройки моста:

DEVICE="br0"
BOOTPROTO="static"
IPADDR="192.168.0.2"    # Host IP
NETMASK="255.255.255.0" # Host Netmask
GATEWAY="192.168.0.1"   # Host Gateway
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"

Запустите sudo service network restart чтобы сетевая конфигурация вступила в силу.

Если вы остаетесь подключенным к вашему серверу, поздравляю, у вас есть рабочий мост!

гипервизор

На чистом Xen xl (libxenlight) это все, что вам нужно написать для конфигурации виртуального интерфейса:

vif=[ 'mac=02:00:00:01:02:03,bridge=br0' ]

Обратите внимание, что 02:00:00:01:02:03 - это MAC-адрес, который Hetzner, OVH или Online.net предоставили вам для гостевой сети, а br0 - это мост, который мы только что настроили выше.

Если вы используете libvirt, внутри <devices> добавьте этот интерфейс:

<interface type='bridge'>
  <mac address='02:00:00:01:02:03'/>
  <source bridge='br0'/>
</interface>

Как только вы настроите этот виртуальный интерфейс с правильным MAC-адресом и мостом, загрузите ваш гость и подключитесь к его консоли (xl console domU , virsh console domU или подключитесь к сеансу VNC гостя, если применимо).

гость

Здесь идет ужасная часть. Это зависит от операционной системы от того, как переопределить проверки работоспособности сети. Я расскажу о Debian/Ubuntu, RHEL/CentOS и Microsoft Windows NT.

В Debian/Ubuntu, если интерфейс называется eth0 , запишите это в /etc/network/interfaces:

auto eth0
iface eth0 inet static
        address 10.0.0.1    # Guest IP
        broadcast 10.0.0.1  # Guest IP
        netmask 255.255.255.255
        gateway 192.168.0.1 # Guest Gateway, a.k.a. Host Gateway
        post-up route add 192.168.0.1 dev eth0
        post-up route add default gw 192.168.0.1
        pre-down route del 192.168.0.1 dev eth0
        pre-down route del default gw 192.168.0.1

Команды iproute2 post-up и post-down сообщают операционной системе в любом случае применить шлюз, даже если он находится в другой подсети.

После запуска sudo service networking restart , вы должны быть в состоянии связаться с гостем через Guest IP 10.0.0.1 .

В RHEL/CentOS, если интерфейс называется eth0 , запишите это в /etc/sysconfig/network-scripts/ifcfg-eth0:

DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
USERCTL="no"
PEERDNS="yes"
TYPE="Ethernet"
NETMASK="255.255.255.255"
IPADDR="10.0.0.1"          # Guest IP
GATEWAY="192.168.0.1"      # Guest Gateway, a.k.a. Host Gateway
ARP="yes"
HWADDR="02:00:00:01:02:03" # Guest MAC

Затем напишите следующее в /etc/sysconfig/network-scripts/route-eth0:

192.168.0.1 dev eth0
default via 192.168.0.1 dev eth0

Этот файл говорит iproute2 применить шлюз в любом случае, даже если он находится в другой подсети.

После запуска sudo service network restart вы сможете подключиться к гостю через Guest IP 10.0.0.1 .

В Microsoft Windows NT перейдите в раздел "Сетевые подключения" на панели управления, щелкните интерфейс правой кнопкой мыши и выберите "Свойства". На вкладке "Сеть" выберите «Протокол Интернета версии 4 (TCP/IPv4)», затем нажмите "Свойства". Заполните поля, как показано:

Свойства протокола Интернета версии 4 (TCP/IPv4)

Когда вы нажмете "ОК", вы получите это предупреждение:

Microsoft TCP/IP: Предупреждение. Шлюз по умолчанию не находится в том же сегменте сети (подсети), который определяется IP-адресом и маской подсети.Вы хотите сохранить эту конфигурацию?

Нажмите "ОК", чтобы подтвердить, что вы все равно хотите использовать шлюз.

Через несколько секунд вы сможете добраться до вашего гостя по гостевому IP 10.0.0.1 .

Динамическая адресация DHCP

К сожалению, это невозможно. Ни один DHCP-сервер не назначит вам 10.0.0.1/32 и сообщит вам, что шлюзом является 192.168.0.1 , даже если вы каким-либо образом перехватили DHCPDISCOVER гостя. И ни один DHCP-клиент не примет эту странную конфигурацию.

Вам нужна правильно структурированная сеть со шлюзом внутри вашей подсети для настройки DHCP. Единственный способ сделать это - создать частную сеть (172.16.0.0/12) и выполнить преобразование сетевого адреса между частным IP-адресом вашего гостя (172.16.0.2) и его общедоступным IP-адресом (10.0.0.1) через шлюз (172.16.0.1).

Частная сеть и NAT

Несмотря на то, что я проверил все вышеперечисленные шаги, я так и не смог создать индивидуальный / базовый NAT от частных IP-адресов до публичных IP-адресов. Частично причина в том, что для построения сетей нужно многое сделать.

Ваша сеть может выглядеть так:

Guest Public IP:  10.0.0.1
Guest Private IP: 172.16.0.2
Guest Netmask:    255.240.0.0 (/12)
Guest Gateway:    172.16.0.1

Затем узел будет пересылать трафик между гостевым общедоступным IP-адресом 10.0.0.1 и гостевым частным IP-адресом 172.16.0.2 через гостевой шлюз 172.16.0.1 .

OpenStack (который поддерживает Xen через libvirt) потенциально может обеспечить эту настройку NAT, а также DHCP-сервер в частной подсети через свою сетевую абстракцию, OpenStack Neutron, но сама настройка OpenStack - довольно сложная задача.

Мне удалось получить установку OpenStack с одним узлом и частные сети Neutron, работающие для экземпляров / гостей / серверов Nova, но я не мог понять, как преобразовывать частные IP-адреса (172.16.0.0/12) в NAT для внешних сетевых IP-адресов 10.0.0.1/32 , 10.0.0.2/32 и т.д.), Поскольку OpenStack не поддерживает нестандартную сетевую структуру Хетцнера, OVH и Online.net для готовых виртуальных машин. Это остается нерешенной проблемой.


Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .