Настройка работы VLAN в CentOS

19 Jan 2015 | Автор: anchous |

Взял тут себе потестить дедик, ну и прикупил на него пул IP. Все вроде настроил – не пингуется. Перепроверил 100 раз, пишу в саппорт, так мол и так, вроде алиасы поднялись, а ничего не пингуется. Так что давайте срочно корректные шлюзы и маски.

На что получаю прекрасный ответ, что надо подключать тегированный VLAN. Спасибо конечно, что сообщили спустя пару суток после подключения. Переходим к настройкам.

Собственно, т.к сетки у меня две, скажем 10.10.1.0 и 10.10.2.0, то узнаем для них номера VLAN’ов, скажем 10.10.1.0 будет VLAN101, в  10.10.2.0 – VLAN102.

За поддрежку VLAN в Linux отвечает модуль ядра 8021q. Теоретически его надо устанавливать дополнительно, но так как у меня стоит CentOS, то он уже есть, т.ч можем проверить его наличие, грузанув его руками:

# modprobe 8021q
доставим в систему конфигурилку для VLAN и посмотрим, будет ли работать:
# yum -y install vconfig
# vconfig add eth0 101
# vconfig add eth0 102
# cat /proc/net/vlan/config
   VLAN Dev name | VLAN ID
   Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
   eth0.101 | 101 | eth0
   eth0.102 | 102 | eth0

Вроде пашет, т.ч переходим к настройке устойчивой к перезагрузкам. Как и все остальные сетевые настройки через initscripts в CentOS, настройки VLAN живут в папке /etc/sysconfig/network-scripts/ , где для настройки можно пойти двумя разными путями, для чего создать один из файлов:

1. ifcfg-vlanNNN, где NNN – номер VLAN (идентификатор VID);
2. ifcfg-INTERFACE-NAME.NNN, где INTERFACE-NAME – имя интерфейса, а NNN – номер VLAN (идентификатор VID).

Попробовал настроить оба варианта, но у меня они не заработали, т.к дополнительные IP не пинговались. Как потом оказалось – проблема была в настройках ядра, т.к по итогу я остановился на втором варианте со стандартными настройками.

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

1. Настройка через файлы виланов

# cat ifcfg-vlan101
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan101
PHYSDEV=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.1.101
# cat ifcfg-vlan102
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID_NO_PAD
DEVICE=vlan102
PHYSDEV=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.2.101

2.Настройка через интерфейсы

# cat ifcfg-eth0.101
VLAN=yes
DEVICE=eth0.101
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.1.101
NETMASK=255.255.255.0
# cat ifcfg-eth0.102
VLAN=yes
DEVICE=eth0.102
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.2.101
NETMASK=255.255.255.0

После перезагрузки сетевой службы или системы, виланы поднимаются, о чем свидетельствуют показания системы:
# cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.101       | 101  | eth0
eth0.102       | 102  | eth0
# ip l ls
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:15:174:77:05 brd ff:ff:ff:ff:ff:ff
6: eth0.101@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 00:15:174:77:05 brd ff:ff:ff:ff:ff:ff
7: eth0.102@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether 00:15:174:77:05 brd ff:ff:ff:ff:ff:ff

Но пинг не ходил, т.ч пришлось ломать голову о причинах. После долгих перетрубаций и изменений файлов настроек VLAN, пришел к выводу, что проблема в модуле, откуда добрался до ядра и фильтра обратного тракта, который и рубит по дефолту асимметричную маршрутизацию:
# sysctl net.ipv4.conf | grep rp_filter
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.lo.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth0/101.rp_filter = 1
net.ipv4.conf.eth0/101.arp_filter = 0
net.ipv4.conf.eth0/102.rp_filter = 1
net.ipv4.conf.eth0/102.arp_filter = 0

так что в файле /etc/sysctl.conf отключил фильтрацию rp_filter, добавлением строк для VLAN и измененив значение дефолтного:
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0/101.rp_filter = 0
net.ipv4.conf.eth0/102.rp_filter = 0
после чего все славненько заработало.

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

Поскольку в одном VLAN у меня сидело несколько IP, то по стандартной процедуре создал файлы  ifcfg-eth0.101:0,  ifcfg-eth0.101:1 и т.д, со стандартным содержанием:
# cat ifcfg-eth0.101:0
VLAN=yes
DEVICE=eth0.101:0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
IPADDR=10.10.1.102
NETMASK=255.255.255.0

VN:F [1.9.21_1169]
Rating: 9.6/10 (8 votes cast)
VN:F [1.9.21_1169]
Rating: +4 (from 4 votes)
Настройка работы VLAN в CentOS, 9.6 out of 10 based on 8 ratings

Теги: , ,

Ваш отзыв