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

Linux NAT через VLAN

У меня есть настройка VLAN через коммутатор, который действует как магистраль. Отправка тегированных пакетов VLAN на соответствующие порты как немаркированных. Это различные устройства, которым требуется один и тот же IP-адрес в одной подсети - 192.168.1.1/24. На хосте Linux у меня настроены все интерфейсы VLAN, и назначение IP-адреса в одной и той же подсети для каждого из них приведет к доступу к 192.168.1.1 по одному. Итак, я знаю, что связь на данный момент работает.

Что мне нужно сделать сейчас, так это иметь способ одновременно общаться с этими устройствами в разных VLAN без изменения IP-схемы устройств. Было бы идеально, если бы трафик типа 192.168.110.1 шел на 192.168.1.1 через VLAN 110, с 192.168.120.1 на 192.168.1.1 через VLAN 120 и так далее. Как я могу создать этот сценарий, или это вообще возможно без какого-либо промежуточного устройства уровня 3 между двумя точками?

Первоначально я думал, что мне понадобится виртуальный интерфейс, который будет действовать как клиент «LAN», позволяя интерфейсу VLAN действовать как «шлюз», а затем просто пересылать порты после этого момента. Просто кажется, что все должно быть проще.

(Примечание: это будет закрытая частная сеть без какого-либо внешнего доступа. Безопасность не требуется, пути просто должны работать.)

К сожалению, похоже, что виртуальная машина - единственное, что нормально. Я решил использовать перенаправление X и в основном запустить небольшую виртуальную машину, чтобы изолировать сеть от хост-машины. Творит чудеса, и производительность Linux KVM или даже Virtual Box не так уж велика. Хорошие времена.

Если я правильно понимаю, вы хотите подключить несколько устройств с одним и тем же IP-адресом (например, 192.168.1.1/24) к разным VLAN, чтобы вы могли управлять ими, не меняя IP-адреса. Я также собираюсь предположить, что вы хотите использовать хост Linux для управления сетевыми приемами, и будете использовать отдельный хост управления в качестве источника для подключения к машинам 192.168.1.1.

Это сложная настройка, поскольку одни и те же IP-адреса находятся в нескольких широковещательных доменах. Однако я думаю, что это должно быть возможно с использованием iproute2 и маршрутизации политики. Каждой VLAN потребуется своя собственная таблица маршрутов (определенная в / etc / iproute2 / rt_tables). Использование наложения, как вы описали, - хорошая идея. Для каждой оверлейной подсети (например, 192.168.110.1) используйте запись iptables PREROUTING в таблице mangle, чтобы пометить пакет меткой fwmark.

Вам также может потребоваться выполнить некоторую фильтрацию ARP с помощью arptables, чтобы убедиться, что ни один пакет ARP не пойдет в неправильном направлении.

Взгляните на LARTC для некоторых примеров. Следующие команды основаны на примерно похожих проектах, которые мы реализовали, но на самом деле я их не пробовал. Придется немного поэкспериментировать. Предполагается, что вы хотите подключиться к 192.168.1.1 с другой машины, а не с Linux «маршрутизатор на флешке».

# give a useful name to the table number
# max table number is 255.
echo "110 vlan110" >> /etc/iproute2/rt_tables

# disable route path filtering
for i in /proc/sys/net/ipv4/*/rt_tables; do
 echo 0 > $i; done
fi
iptables -t mangle -A PREROUTING -d 192.168.110.0/24 -j MARK --set-mark 1 # set mark
ip rule add fwmark 1 table vlan110 # match on existing mark
ip route add 192.168.1.0/24 dev eth0.110 # force connected network to this interface
iptables -t nat -A PREROUTING -d 192.168.110.0/24 -j DNAT --to 192.168.1.1  # NAT overlay