Настройка работы VLAN в CentOS
19 Jan 2015 | Автор: dd |Взял тут себе потестить дедик, ну и прикупил на него пул 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
Теги: centos, Сетевые протоколы, Сети