У меня такая топология сети:
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)
Ситуация следующая:
Когда я поднимаю 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 спецификации:
Исключением из этих правил являются шлюзы (или маршрутизаторы), которые знают о нескольких сетях, и у них тоже есть шлюз по умолчанию ...
Иногда вы хотите иметь «многосетевой ПК», у которого есть интерфейсы более чем одной сети, но они хотят отключить маршрутизацию - у них вообще не было маршрутизаторов (или шлюзов). Если ПК ожидает пакет от шлюза, и он будет приходить от другого ПК, он отбросит этот пакет как поддельный.
Есть способ сказать ПК в сети, что пакеты для адреса 192.168.100.10 нужно будет отправлять через другой ПК, но это:
Тогда я могу вам настоятельно посоветовать этого не делать. Делайте сеть настолько простой, насколько это возможно, и у вас не будет проблем.
Ваш коммутатор должен поддерживать 802.1q и иметь правильную конфигурацию vlan. Может быть, вы определяете только один vlan, или порт находится в режиме доступа (и он должен быть транковым). Проверьте свой Linux и журналы переключения: вы что-то видите?