Небольшой лайфхак, которым можно воспользоваться, если вы хотите сэкономить немного IPv4 адресов на свои виртуальные машины в XenServer(не принципиально).

После того, как Вы установили на сервере Hetzner'a XenServer или иную ОС, Вы получаете 1 IP адрес, маску и шлюз. Поскольку для виртуальных машин необходимы отдельные адреса, у Вас есть возможность их заказать:





Для примера нам выделили 46.4.205.64/29. Как использовать все 8 адресов? Об этом ниже.

На XenCenter создаем дополнительную сеть:







Назначаем dom0 в этой подсети адрес из диапазона приватных адресов (в данном случае 172.16.1.1/24):



При создании новой VM в процессе настройки указываем, чтобы сетью выступала вновь созданная сеть Network 1:



Установка ОС в виртуальной машине может вызвать некоторые неудобства, если она будет нуждаться в интернете. Поэтому для Linux-дистрибутивов рекомендуется использовать полные образы, а не netinstall. Однако всегда для таких нужд можно заказать один дополнительный IP, и на момент установки использовать его (соответственно через сеть Network 0).

В процессе установки ОС при настройке сети указывайте IP из вышеупомянутого диапазона (в данном случае 172.16.1.0/24), к примеру 172.16.1.10/24 без указания шлюза.

После установки давайте назначим нашем виртуальной машине адрес 46.4.205.64:

— в настройках сетевого интерфейса (к примеру в debian):

/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 172.16.1.10
netmask 255.255.255.0

auto eth0:0
iface eth0:0 inet static
address 46.4.205.64
netmask 255.255.255.255

— и пропишем маршрут в автозагрузке:

#mcedit /etc/network/if-up.d/route
#!/bin/bash
/sbin/ip route add default via 172.16.1.1 src 46.4.205.64

не забыв #chmod +x /etc/network/if-up.d/route

С этим, настройка сети виртуальной машины закончена. Осталось подкорректировать маршрутизацию на dom0.

Определяем uuid нашей сети (Network 1):

#xe network-list

Добавляем статический маршрут на нашу подсеть:

#xe network-param-set uuid=uuid other-config:static-routes=46.4.205.64/29/172.16.1.1

Проверочка:

#ip ro
default via <внешний адрес> dev xenbr0
46.4.173.64/29 via 172.16.1.1 dev xapi1
172.16.1.0/24 dev xapi1 proto kernel scope link src 172.16.1.1
<внешний адрес>/29 dev xenbr0 proto kernel scope link src <шлюз хетцнера>

Ну и в заключении:

Заголовок спойлера
C:\Users\spacewalk>ping 46.4.205.64

Обмен пакетами с 46.4.205.64 по с 32 байтами данных:
Ответ от 46.4.205.64: число байт=32 время=40мс TTL=56
Ответ от 46.4.205.64: число байт=32 время=40мс TTL=56
Ответ от 46.4.205.64: число байт=32 время=40мс TTL=56
Ответ от 46.4.205.64: число байт=32 время=40мс TTL=56

Статистика Ping для 46.4.205.64:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 40мсек, Максимальное = 40 мсек, Среднее = 40 мсек

C:\Users\spacewalk>tracert 46.4.173.60

Трассировка маршрута к static.60.173.4.46.clients.your-server.de [46.4.173.60]
с максимальным числом прыжков 30:

1 1 ms 2 ms <1 мс 192.168.89.1
2 1 ms 1 ms 1 ms 213.231.0.200
3 2 ms 1 ms 1 ms odessa1-xe-0-0-0-931.ett.ua [80.93.126.69]
4 53 ms 34 ms 61 ms fft-od.ett.ua [80.93.127.238]
5 36 ms 45 ms 36 ms decix2-gw.hetzner.de [80.81.193.164]
6 40 ms 42 ms 40 ms core22.hetzner.de [213.239.245.17]
7 48 ms 42 ms 40 ms ex9k1.rz13.hetzner.de [213.239.229.150]
8 41 ms 40 ms 41 ms static.<внешний адрес>.clients.your-server.de [<внешний адрес>]
9 40 ms 40 ms 41 ms static.64.205.4.46.clients.your-server.de [46.4.
205.64]


Трассировка завершена.

Решение не привязано к конкретной платформе маршрутизации и ОС в виртуальных машинах, просто под рукой был такой набор ПО. Единственный вопрос — как это реализовать с виртуальной машиной Windows. Возможно в комментариях подскажут.

Экономьте адреса и спасибо за внимание.
Поделиться с друзьями
-->

Комментарии (25)


  1. SLASH_CyberPunk
    09.12.2016 13:57
    +1

    Простите, но где здесь экономия?


    1. spacewalk
      09.12.2016 14:00

      в интернете я встречал много мануалов, когда во второй сети самому xen'у назначается адрес из выделенной /29 подсети, и он является шлюзом. в этом случае теряется 3 адреса — адрес на xen'е + 2 (адрес подсети и бродкаст)


      1. SLASH_CyberPunk
        09.12.2016 14:08

        Я могу ошибаться, но прям у Hetzner в wiki это прописано…
        Вы бы лучше расписали, как с одним белым айпи настраивать виртуалки и форвадить порты между внешкой и виртуалками…


        1. spacewalk
          09.12.2016 14:20

          В wiki как раз советуется путь через назначения одного из адресов шлюзом + 2 неиспользуемые.



          От этого я и пытался уйти


  1. mxms
    09.12.2016 14:02

    В сети /29 вы не сможете использовать все полученные 8 адресов подсети, а сможете только 6.


    1. spacewalk
      09.12.2016 14:04

      это решение обходит данную проблему


      1. mxms
        09.12.2016 14:08

        Гм. Не «по IP уставу» это.


        1. spacewalk
          09.12.2016 14:22

          по уставу) дело в том, что адреса прописаны с маской /32, это своего рода point-to-point


          1. inkvizitor68sl
            09.12.2016 15:44
            -1

            Угу, осталось теперь рассказать как-то всему интернету, что на адресе сети и на broadcast-адресе у вас хост, а не то, что там должно быть по стандартам.
            И если с адресом сети попроще (в nix-ах как-то относительно подзабили на то, что этот адрес особенный), то вот с машиной на broadcast жить будет весело, ага.


            1. spacewalk
              09.12.2016 16:26

              Понятия адреса сети и бродкаст адреса это исключительно понятия вашей сети. Для интернета эти адреса маршрутизируются одинаково. Если бы я использовал на клиентах в настройках сети 46.4.205.64/29, то для них существовал бы адрес сети .64 и броадкаст .72. А у меня /32. Для кого .72 является бродкастом?


              1. inkvizitor68sl
                09.12.2016 16:46

                > я использовал на клиентах
                Всем по*й, как ты настроил «клиенты». Маршрутизацией сети 46.4.205.64/29 занимается вышестоящее железо. А в RFC написано дропать пакеты с src 46.4.205.64 для сети 46.4.205.64/29.

                Ну а вешать broadcast адрес на интерфейс — это вообще много ума иметь надо.


                1. spacewalk
                  09.12.2016 16:53

                  > А в RFC написано дропать пакеты с src 46.4.205.64 для сети 46.4.205.64/29
                  Можно ссылочку?


                  1. inkvizitor68sl
                    09.12.2016 17:21
                    +1

                    https://tools.ietf.org/html/rfc2644, section 3, например.


                    1. spacewalk
                      09.12.2016 18:00
                      +3

                      помоему вы путаете. хетнцер дает мне 8 адресов, /29. я могу их использовать как мне удобно. могу организовать шлюз .65, «клиенты» 66-71. тогда у меня будет бродкаст 72, и данная рекомендация
                      >>https://tools.ietf.org/html/rfc2644
                      будет по отношению к этому шлюзу
                      >> дропать пакеты с src 46.4.205.64 и .72 для сети 46.4.205.64/29. понятие бродкаст адреса лежит в рамках одного бродкаст домена, а не всего интернета. завтра мне захочется поделить мою /27 на две /28 и у меня станет уже два бродкаста. И мне рекомендуют (https://tools.ietf.org/html/rfc2644) закрыть хождение пакетов от бродкаста через мой шлюз, потому что если извне через шлюз придет пакет с dest_ip бродкаста моей подсети, на него ответят все узлы этой подсети

                      представленная сеть не имеет шлюза, не имеет бродкаст-доменов в полном их понимании, там маршрутизируются /32 адреса и на крайний адрес ответит только он и никто больше, потому что пакет придет не через шлюз в бродкаст домен, он придет конкретно к узлу с адресом .72 или .64


          1. mxms
            09.12.2016 22:32

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


  1. MeGaPk
    09.12.2016 14:06

    А в XenServer починили OpenSwitch который вырубал на сервере инет, от любого школо доса?


    1. spacewalk
      09.12.2016 14:09

      К счастью не сталкивался с такой ситуацией) поэтому не в курсе


      1. MeGaPk
        09.12.2016 15:04

        ну будьте бдительны. Мне пришлось плюнуть на XenServer как раз из-за этого :).


    1. Neris
      09.12.2016 14:53

      Не так давно хецнер прилепили защиту от ддоса. Правда пока не понятно, на сколько эффективно она работает.


      1. kotomyava
        09.12.2016 15:22

        Защита от DDoS в исполнении Hetzner это нульроут на любой чих. =)
        Что, в общем-то, и нормально за такие деньги.


  1. mikeus
    09.12.2016 17:02

    Не совсем понятно почему

    #xe network-param-set uuid=uuid other-config:static-routes=46.4.205.64/29/172.16.1.1

    а не сразу
    #xe network-param-set uuid=uuid other-config:static-routes=46.4.205.64/29/172.16.1.10


    1. spacewalk
      09.12.2016 17:03

      потому что это статический роут на всю подсеть /29 через интерфейс сети network 1, а этот интерфейс имеет адрес 172.16.1.1


      1. mikeus
        09.12.2016 18:38

        Ааа, /29 не заметил.


      1. mikeus
        09.12.2016 18:51

        Я не знаток Xen, а подключать виртуалки к Network 0 и прописывать им эти белые адреса (т.е. без создания странной дополнительной Network 1) можно?


  1. spacewalk
    09.12.2016 21:08

    Задача Network 1 — организовать сетевую доступность между виртуальными машинами и dom0. Network 0 наверное можно было бы обойтись, если назначить alias интерфейсу xenbr0 с адресом приватной сети 172.16.1.1/24.

    Но без использования приватной сети мне решения не видится