LINUX.ORG.RU
ФорумAdmin

Настройка OpenVZ VETH соединения

 ,


0

2

Встала задача по настройке сервера с OpenVZ виртуалками. Имеем: физический сервер (CentOS 6), несколько IPv4 адресов, создано два контейнера.

Необходимо второму контейнеру выдать внешний IP адрес (допустим, 1.1.2.2).
Раньше настройкой виртуализации не занимался, но насколько понял из различной документации, для получения контейнером внешнего IP необходимо подключить его при помощи VETH соединения. Выполнил действия, описанные во многих инструкциях. В итоге хост-сервер работает через bridge (vmbr0), для контейнера создан персональный интерфейс (veth200.0):

eth0      Link encap:Ethernet  HWaddr 00:30:48:F1:7F:E6  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1210 errors:0 dropped:0 overruns:0 frame:0
          TX packets:480 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:105064 (102.6 KiB)  TX bytes:67279 (65.7 KiB)
          Interrupt:16 Memory:fbce0000-fbd00000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:433 (433.0 b)  TX bytes:433 (433.0 b)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:6 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

veth200.0 Link encap:Ethernet  HWaddr 00:18:51:E6:A1:DB  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:318 errors:0 dropped:4 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:496 (496.0 b)  TX bytes:14678 (14.3 KiB)

vmbr0     Link encap:Ethernet  HWaddr 00:18:51:E6:A1:DB  
          inet addr:1.1.2.1  Bcast:1.1.1.1  Mask:255.255.255.248
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1221 errors:0 dropped:0 overruns:0 frame:0
          TX packets:483 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:83772 (81.8 KiB)  TX bytes:66023 (64.4 KiB)
(Внешний IP адрес сервера заменён, строка inet6 из интерфейсов убрана)

Однако назначить на контейнер адрес не выходит:
# vzlist -a
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
       110         49 running   192.168.1.110   container1.com
       200         38 running   -               container2.com
При использовании VENET соединения адрес был установлен в 192.168.1.200. Конфиг контейнера выглядит следующим образом:
NETFILTER="stateless"
VE_ROOT="/vz/root/$VEID"
VE_PRIVATE="/vz/private/$VEID"
OSTEMPLATE="centos-6-x86_64-minimal"
ORIGIN_SAMPLE="vswap-2g"
ONBOOT="yes"
NAMESERVER="8.8.8.8 8.8.4.4"
HOSTNAME="container2.com"
NETIF="ifname=eth0,mac=00:18:51:DF:00:52,host_ifname=veth200.0,host_mac=00:18:51:E6:A1:DB,vmbr0"
IPADDR=192.168.1.200

Из самого контейнера сеть недоступна, хотя вроде бы IP адрес присвоен (хоть и не внешний):

eth0      Link encap:Ethernet  HWaddr 00:18:51:DF:00:52  
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:41 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1936 (1.8 KiB)  TX bytes:496 (496.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Различные forwarding`и и proxy_arp установил.
Подскажите, пожалуйста, что я забыл сделать?

Ответ на: комментарий от Amet13

Обрывочные данные из многочисленных инструкций, лишённых информации для понимания ситуации, связали в моей голове термины «VETH» и «Внешний адрес» во что-то единое.

MacDeveloper
() автор топика
Ответ на: комментарий от poiuty

Закомментировал блок NETIF в конфиге, назначил внешний адрес. В vzlist теперь отображается всё верно, но при попытке сделать пинг из контейнера возникает ошибка «Destination Host Prohibited». iptables в контейнере отключен, форвардинг включён. Что ещё поправить надо?

MacDeveloper
() автор топика
Ответ на: комментарий от MacDeveloper

Для того чтобы veth работал как предполагается:

1. На хосте должено быть разрешено прохождение трафика через цепочку FORWARDING внезависимости от того включено ли ip_forward.

2. host_mac в конфигурации VE должен быть

fe:ff:ff:ff:ff:ff
в противном случае у вас будет отваливаться сеть на хосте после останова последнего контейнера.

3. При использовании veth ip-адреса назначаются изнутри контейнера штатными средствами того дистрибутива который работает внутри контейнера.

--ipadd

 работатет только с venet.
trancefer ★★
()
Ответ на: комментарий от trancefer

К сожалению, я не особо силён в администрировании серверов с такого аспекта. Можно чуть подробнее насчёт первого пункта?

MacDeveloper
() автор топика
Ответ на: комментарий от trancefer

Не нужно ему форвардинг. Пусть пихает железный интерфейс и свои veth'ы в мост на нулевой ноде, а дальше работает с этим всем так, как будто у него просто несколько компьютеров в общий свич воткнуты.

YAR ★★★★★
()
Ответ на: комментарий от trancefer

Ошибка, конечно же, цепочка называется FORWARD:

iptables -P FORWARD ACCEPT

trancefer ★★
()
Ответ на: комментарий от trancefer

Гм. А ведь не должно, это другой уровень.

YAR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.