Назад | Перейти на главную страницу

Linux маршрутизация vlan

У меня такая топология сети:

network 192.168.100.0/24 vlan 100
network 192.168.200.0/24 vlan 200

один сервер ubuntu (2 vlan на 1 эфир) eth0.100 (ip: 192.168.100.10/24) eth0.200 (ip: 192.168.200.20/24 def gw 192.168.200.254)

Ситуация следующая:

  1. eth0.200 работает
  2. eth0.100 нас не работает.
  3. подключение из подсети 192.168.100.0/24 нормально к 192.168.200.20.

Когда я поднимаю eth0.100:

как это исправить?

пробовал с rp_filter = 0 / rp_filter = 1

#cat /etc/network/interfaces
iface eth0.200 inet static
    address 192.168.200.20
    netmask 255.255.255.0
    vlan-raw-device eth0
    gateway 192.168.200.254
    post-up ip r a 192.168.200.6 via 192.168.200.250 #one ip behind wifi

iface eth0.100 inet static
    address 192.168.100.10
    netmask 255.255.255.0
    vlan-raw-device eth0

Хотите работать с:

iptables -A PREROUTING -t mangle -i eth0.100 -j MARK --set-mark 100
iptables -A PREROUTING -t mangle -i eth0.200 -j MARK --set-mark 200
making some route tables like t100 and t200
and then ading rule like:
ip rule add from all fwmark 100 table t100
ip rule add from all fwmark 200 table t200

ЭТО БЫЛ RP_FILTER

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eth0/100.rp_filter = 0
net.ipv4.conf.eth0/200.rp_filter = 0

Добавление моего комментария в качестве ответа, чтобы его можно было отметить.

Подобные проблемы вызваны net.ipv4.conf.*.rp_filter.

когда rp_filter включено, ядро ​​будет отклонять трафик, поступающий на интерфейс, адрес источника которого совпадает с подсетью другого интерфейса на этом сервере.

Часто проблемы могут возникнуть, если этот параметр включен на net.ipv4.conf.all.rp_filter, но не на конкретных интерфейсах, например net.ipv4.conf.eth0.rp_filter.
Настройка по умолчанию для rp_filter является 0, однако многие дистрибутивы отменяют этот параметр. Поскольку он устанавливается вручную дистрибутивом при загрузке, установив его в net.ipv4.conf.all.rp_filter больше не работает, его нужно установить на конкретном интерфейсе (например, net.ipv4.conf.eth0.rp_filter).

Думаю, есть проблема с плохой сегментацией сети, если вам нужно ip r a 192.168.200.6 via 192.168.200.250 строчку в конфигурации ... Если вы заявляете, что на eth0.200 есть сеть 192.168.200.0/24, почему вы хотите зайти на ПК с IP-адресом 192.168.200.6 через какой-то другой ПК? Это не очень систематично.

Каждую сеть должен маршрутизировать только один маршрутизатор. Если у вас есть где-то в сети маршрутизатор, который маршрутизирует трафик между сетями 192.168.100.0/24 и 192.168.200.0/24, вы можете иметь эту конфигурацию на этом компьютере, но вы должны отключить маршрутизацию на этом ПК! Ваш компьютер будет в обеих сетях, но трафик будет проходить через маршрутизатор, что и ожидает компьютер в сети.

Когда ПК захочет связаться с другими, в явном случае они увидят в сетевом адресе и маске сети, какой метод он выберет. Если у него, например, IP-адрес 192.168.200.20 и сетевая маска 255.255.255.0, это такая ситуация (используется ipcalc):

# ipcalc 192.168.200.20/24
Address:   192.168.200.20       11000000.10101000.11001000. 00010100
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.200.0/24     11000000.10101000.11001000. 00000000
HostMin:   192.168.200.1        11000000.10101000.11001000. 00000001
HostMax:   192.168.200.254      11000000.10101000.11001000. 11111110
Broadcast: 192.168.200.255      11000000.10101000.11001000. 11111111
Hosts/Net: 254                   Class C, Private Internet

В обычном случае этот компьютер может напрямую связываться с каждым ПК в диапазоне 192.168.200.1-192.168.200.254 - они отправят arp-запрос с IP-адресом назначения на широковещательный адрес, ПК-получатель ответит на него, а ПК будет иметь адрес связи (MAC) и IP-адрес ПК назначения и может отправлять ему пакет напрямую.

Если они хотят связаться с ПК из другой подсети, они вычислят (используя IP-адрес и сетевую маску), что он не может связаться с ним напрямую, и отправят пакет с IP-адресом ПК назначения, но с MAC-адресом шлюза (обычно шлюза по умолчанию). Шлюз имеет прямое соединение с этой сетью или отправит пакет через другой шлюз ... И ответ нашему компьютеру будет идти с его собственного шлюза, а не с другого компьютера в сети.

В нормальном случае для каждого ПК в сети требуется только 3 спецификации:

  1. айпи адрес
  2. Маска сети
  3. Шлюз по умолчанию

Исключением из этих правил являются шлюзы (или маршрутизаторы), которые знают о нескольких сетях, и у них тоже есть шлюз по умолчанию ...

Иногда вы хотите иметь «многосетевой ПК», у которого есть интерфейсы более чем одной сети, но они хотят отключить маршрутизацию - у них вообще не было маршрутизаторов (или шлюзов). Если ПК ожидает пакет от шлюза, и он будет приходить от другого ПК, он отбросит этот пакет как поддельный.

Есть способ сказать ПК в сети, что пакеты для адреса 192.168.100.10 нужно будет отправлять через другой ПК, но это:

  • не систематический (см. выше)
  • это неудобно для администратора, потому что каждый ПК в сети 192.168.200.0/24 должен знать об этом, и наоборот - каждый ПК в сети 192.168.100.0/24 должен связываться с 192.168.200.20 через шлюз 192.168.100.10. Разве это не беспорядок?

Тогда я могу вам настоятельно посоветовать этого не делать. Делайте сеть настолько простой, насколько это возможно, и у вас не будет проблем.

Ваш коммутатор должен поддерживать 802.1q и иметь правильную конфигурацию vlan. Может быть, вы определяете только один vlan, или порт находится в режиме доступа (и он должен быть транковым). Проверьте свой Linux и журналы переключения: вы что-то видите?