LINUX.ORG.RU
ФорумAdmin

Изоляция/фильтрация трафика всей сети. С одинаковым Default GW для всех клиентов.

 , , ,


1

2

Существует проблема изоляции клиентов друг от друга:
1. Необходимо иметь возможность с КОНКРЕТНОГО VLAN для КОНКРЕТНОГО IP разрешать (по умолчанию всё запрещено) роутинг в КОНКРЕТНЫЙ VLAN на КОНКРЕТНЫЙ IP на КОНКРЕТНЫЙ порт (использоваться, в основном только TCP будет).
2. При этом все клиенты (машины в сети) должны иметь ОДИНАКОВЫЙ IP дефолт гетевея прописанным. (!!!!!!!!!!!!!!!)

Извиняюсь за капс, но на лоре весьма много людей с позицией «бред писал, топик не читал».

A - клиенты, P - их сервера, S - сервер-шлюз (фильтрующий трафик).

Технически это должно выглядеть так:
Например, нужно иметь возможность с A1 (192.168.1.1) получить доступ к P6 (192.168.1.6) на TCP 22. Тогда:
1. А1 отсылает arp-запрос IP-адреса 192.168.1.1 в VLAN1, который приходит на виртуальный интерфейс vlan0.1 у S8.
2. S8 отвечает на запрос любого IP, ставя свой MAC (или, таки удалённого компа!?).
3. S8 проверяет правило в стиле: от 192.168.1.1 с vlan0.1 к 192.168.1.6 на vlan0.6 протокол TCP порт 22.
4. Правило верно, тогда пакет уходит с vlan0.6 на P6, а в ipbtales делается запись established для данной сессии, чтобы пакеты обратно пропускались.

Проблема именно в том, что из-за необходимости иметь одинаковый IP на всех компах (т.е. для клиентов взаимодействие с другими клиентами должно быть настолько же (кроме широковещалки) прозрачно, как и в обычной сети, но с чёткими ограничениями через фильтрующий сервер S8). Из-за этого условия нельзя воспользоваться тупой нарезкой сети по 4 IP (два отнимаются, т.к. нижний - номером сети будет, верхний - броадкасn-адресом, согласно спецификации IP). В случае с нарезкой на такие сегменты всё просто: поскольку это тупо куча разных сетей (по одной на клиента, фактически), то можно использовать тупой роутинг + iptables форвардинг с проверкой условий. Но по моим условиям (у всех должен быть один IP gefault gw) так сделать нельзя.

Я пришел к выводу, что мою задачу можно реализовать двумя путями:
1. Для того, чтобы сервер выдавал свой MAC при ARM-запросе IP от клиента присваиваем ему все IP всех клиентов.
Далее в iptables пишем, что netfilter заменяет (в стадии PREROUTING) адрес клиента 192.168.1.X на 192.168.2.X (чтобы сервер сам не стал обрабатывать пакеты, т.к. ему все адреса присвоены).
После чего уже делаем проверку прав и определение исходящего интерфейса в FORWARD.
Далее в POSTROUTING уже обратно заменяем 192.168.2.X на 192.168.1.X

Проблемы:
Всё на костылях.
Один IP можно назначить только одному интерфейсу. А тут нужно назначить на каждый VLAN кучу IP, за исключением IP клиента. Хотя это делается, однако никакой реакции от всех интерфейсов, кроме одного на конкретный IP не будет. Даже если мы разрешим (есть такая опция) принимать данные с любых IP, то исходящие пакеты будут только с одного (причём не ясно какого) интерфейса.


2. Использовать ARP PROXY, чтобы отвечать своим MAC на любой ARP-запрос.
Но это лишь преодолевает костыль с подменой IP на 192.168.2.X, но никак не проблема дубликатов IP на интерфейсов.
Ведь (!!! Поправьте, если я не прав) iptables и route не будет работать (и нет настроек ядра, чтобы это изменить), если IP шлюза, указанный в пакете, не будет совпадать с тем, который реально есть у интерфейса, даже если ethernet-кадр пришел.


3. Использовать ebtables. ebtable позволяет работать с L2, там есть поддержка протокола. Но для нормальной (насколько я знаю) работы с tcp (особенно в плане established для разрешения ответов с принимающего конца).
Но разве iptables может работать, когда на интерфейсах нет ip (вопрос скорее риторический)? Или ebtables научился нормально с tcp работать (особенно меня запоминание открытых соединений для разрешения ответов с другой стороны интересует)?

На ум приходят только такие настройки для ebtables (подразумевается, что все vlan'ы объединены в бридж, который рубит весь неразрешенный трафик (последняя строка)):
-p IPv4 -i vlan0.1 -o vlan0.6 --ip-src 192.168.1.1 --ip-dst 192.168.1.6 --ip-proto tcp --ip-dport 22 -j ACCEPT
-p IPv4 -i vlan0.6 -o vlan0.1 --ip-src 192.168.1.6 --ip-dst 192.168.1.1 --ip-proto tcp --ip-sport 22 -j ACCEPT
-p IPv4 -j DROP
#Всё, что дошло до сюда уже переходит в следующую часть, где должна происходить L2-маршрутизация. Хотя, думаю, что она произойдёт автоматически, т.к. VLAN'ы объединены в свитч виртуальный должны быть.

В этом случае для того, чтобы пускать машины в инетик, нужно в --ip-dst использовать адрес GW (192.168.1.7) или уже внешние адреса, например:
-p IPv4 -i vlan0.1 -o vlan0.7 --ip-dst 192.168.1.7 -j ACCEPT
или
-p IPv4 -i vlan0.7 -o vlan0.1 ! --ip-dst 192.168.1.0/24 -j ACCEPT
?

Я не совсем понял, как именно клиент работает с default gw. Он тупо на его MAC высылает готовые IP-пакеты, что ли? Т.е. в самих пакетах к шлюзу его IP вообще не фиругирует?

Огромное спасибо всем, кто будет помогать мне в решении такой задачки ^____^ .

Схема следующая:
.............Свитч
.......... -------------
A1 ------|VLAN1....|
..........|...........|
A2 ------|VLAN2....|
..........|...........|
A3 ------|VLAN3....|
A4 ------|VLAN4....|
A5 ------|VLAN5....|
..........|....VLAN8|--------- S8 (сервер-фильтр)
P6 ------|VLAN6....|
P7 ------|VLAN7....|
--------------
Порошу простить за точки, считайте, что это пробелы. Движок все пробелы больше одного делает одним пробелом. Вероятно, ширина тема действительно куда важнее, чем такая мелочь. Скажем спасибо maxcom и прочим любителям микроэкранов.

Используйте схему netfilter и ebtables для понимания их работы: http://4.bp.blogspot.com/_N3xuQCvc1v4/TQlz5a1YXSI/AAAAAAAAASc/f0aNn5Z1q3I/s16...

нельзя воспользоваться тупой нарезкой сети по 4 IP (два отнимаются, т.к. нижний - номером сети будет,верхний - броадкасn-адресом,согласно спецификации IP)

Читайте спецификации внимательнее,гламурный вы наш. Использование сети на 2 адреса (маска /32) вполне законно и корректно.Плюс на хосте может быть несколько маршрутов по умолчанию

весь топик не читал

zolden ★★★★★
()

(!!!!!!!!!!!!!!!)

За это убивать надо.

zgen ★★★★★
()

По схеме не совсем понятно что Вы хотите.

1. Все вланы терминируются на свиче. Тогда он и должен управлять роутингом. В случае L3 свича на него же можно повесить правила доступа.

1. Гнать транком все вланы на сервер, и уже на нем управлять доступом. Тогда дефолт-гейт вешается на lo. И добавляются правила маршрутизации для вланов.

at ★★
()
Ответ на: комментарий от zolden

Использование сети на 2 адреса (маска /32) вполне законно и корректно.

Это не всегда работает. При совпадении сурса или дистинейшена с броадкастом некоторые службы ведут себя странно.

at ★★
()

4. Использовать L3 коммутатор с маршрутизацией и фильтром.

zgen ★★★★★
()

Задача понятна, непонятна цель. Зачем такие извращения? Пространства приватных IP недостаточно? Может цель достижима другими средствами?

anonymous
()
Ответ на: комментарий от anonymous

Задача понятна, непонятна цель. Зачем такие извращения? Пространства приватных IP недостаточно? Может цель достижима другими средствами?

Согласен, ТС понапридумывал себе мельниц, теперь героически с ними сражается

Turbid ★★★★★
()
Ответ на: комментарий от zolden

эм... ты конечно извини, но это вряд ли канает в обычных Ethernet-сетях. Ибо адрес сети а адрес широковещательной рассылки съедят все адреса из /31. Поэтому корректнее - сеть из 2 адресов, которые можно выдать КОНКРЕТНЫМ устройствам это всё-таки /30

Pinkbyte ★★★★★
()

На вскидку: ACL на свиче + port based vlan. Свич естественно должен быть L3

А, и да - ip unnumbered уже тоже советовали. Но там придется дополнительные cisco-specific шаманства делать

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

ты не докрутил до камента с rfc3021
реально под нагрузкой я конечно не тестировал, но взятые наугад 2 хоста у меня вполне работали

zolden ★★★★★
()
Ответ на: комментарий от zolden

ты меня конечно тоже извини, я курнул RFC, но нихрена не понял :-(

Using 31-Bit Prefixes on IPv4 Point-to-Point Links

Я так понимаю, судя по RFC броадкаст и адрес сети идут нафиг?

Какое оборудование так умеет, кроме хостов с Linux?(они, я верю умеют, флаг broadcast можно на интерфейсе поотключать, статик арп заюзать и т.д.)

И я слабо понимаю нужность подобного извращения. Разве что если на обоих концах линка - реальные IPv4 и их надо экономить. Но тогда ИМХО лучше заюзать какой-нибудь туннель а-ля GRE поверх серых IP(правда придется пожертвовать парой десятков байт в MTU).

Pinkbyte ★★★★★
()

а почему бы необьеденить все вланы в бридж - и фильтровать на мак уровне (ebiptables вроде) ? дешево и сердито

ae1234 ★★
()
Ответ на: комментарий от Pinkbyte

Какое оборудование так умеет, кроме хостов с Linux?

Я может чего не понимаю в вашем споре, но вешать на интерфейс p2p сетку аля /31 умеет как минимум cisco и juniper. Что не так?

xscrew ★★
()
Ответ на: комментарий от xscrew
r1#show running-config interface fastEthernet 0/1 | i address
 ip address 10.1.2.0 255.255.255.254
r1#ping 10.1.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/45/88 ms
xscrew ★★
()
Ответ на: комментарий от zolden

нельзя воспользоваться тупой нарезкой сети по 4 IP (два отнимаются, т.к. нижний - номером сети будет,верхний - броадкасn-адресом,согласно спецификации IP)

Мне нельзя в соответствии со вторым условием. Что на 4 IP можно нарезать я и без Вас знаю, читайте текст внимательнее. Я уже писал, что это выход, но там для каждого компа будет разный GW (из этой микросети), а мне нужен одинаковый IP для всех.

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от zgen

Не, это связано с моей домашней (личной) сетью.

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от zolden

И да: Вы говорили, что с соответствующей маской можно сделать сеть на 2 IP. Но это работает только с P2P (PPP). Для ethernet нужно ещё минимум 2 IP на броадкаст (старший) и на номер сети (младший). Поправьте, меня если я ошибаюсь.

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от ae1234

Смотри третий пункт моих размышлений. Я всё, что пока сказали в треде предусмотрел и написал об этом. Разве так сложно прочитать полторы страницы текста?

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от ktulhu666

Ну так и используйте один гейт для всех клиентов. То есть примерно так

ip route add unreachable 192.198.1.0/24
ip addr add 192.168.1.1/32 dev lo # это гейт
vconfig add eth0 100
ip link set eth0.100 up
ip route add 192.168.1.2/32 dev eth0.101 src 192.168.1.1 # это первый клиент в 100 влане
и т.д.
Т.к. ip гейте находится на lo-интерфейсе он виден всем клиентам, если включить proxy_arp клиенты будут видеть друг друга, но в этом случае обмен будет происходить через сервер, т.е. он сможет контролировать трафик. При выключенном proxy_arp клиенты будут видеть только сервер.

at ★★
()
Ответ на: комментарий от xscrew

Я может чего не понимаю в вашем споре, но вешать на интерфейс p2p сетку
аля /31 умеет как минимум cisco и juniper. Что не так?

То, что Ethernet - ни разу не point-to-point.

r1#show running-config interface fastEthernet 0/1 | i address
ip address 10.1.2.0 255.255.255.254
r1#ping 10.1.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/45/88 ms

А, теперь, самое время заценить, как там трафик ходит.

AS ★★★★★
()
Ответ на: комментарий от AS

А, теперь, самое время заценить, как там трафик ходит

Расскажете?
Я просто не догадался дамп снять, когда тестировал и навешивал адреса из /31 на первые попавшиеся хосты.

zolden ★★★★★
()

Я не совсем понял, как именно клиент работает с default gw. Он тупо на его MAC высылает
готовые IP-пакеты, что ли? Т.е. в самих пакетах к шлюзу его IP вообще не фиругирует?

Да, конечно. IP инкапсулирован в Ethernet. На то ARP и нужен, чтобы узнать нужный MAC.

AS ★★★★★
()
Ответ на: комментарий от ktulhu666

Вы заморочались с пониманием принципов работы, наворотили много умных терминов, смешали в кучу L2 и L3, в итоге запутали и себя и местных знатоков.
Давайте плясать от обратного - т.е. от L7
Рассказывайте, что да как нужно приложениям пользователей, а как оно там на L2 и ниже будет работать (и соответственно как вы себе это вообразили)- это дело десятое

zolden ★★★★★
()
Ответ на: комментарий от zolden

Расскажете?

Не то, чтобы я был уверен на 100%...

Я просто не догадался дамп снять, когда тестировал и навешивал адреса из /31
на первые попавшиеся хосты.

...но я сильно подозреваю, что тут имеет место широковещательный трафик. По-другому я не представляю пока, как объяснить.

AS ★★★★★
()
Ответ на: комментарий от AS

То, что Ethernet - ни разу не point-to-point

А с этим кто-то спорит? Ну и что мешает работе?

А, теперь, самое время заценить, как там трафик ходит.

Заценим!

Собственно дамп и хронология событий:

Смотрим, все и так понятно.

r1#ping 10.1.2.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.2.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/46/68 ms
r1#sh ip arp 10.1.2.0
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.2.0                -   ca03.1ab4.0006  ARPA   FastEthernet0/1
r1#sh ip arp 10.1.2.1
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.2.1                2   ca04.1ab4.0008  ARPA   FastEthernet0/1

Смотрим дамп:

8	7.735000	ca:03:1a:b4:00:06	Broadcast	ARP	60	Who has 10.1.2.1?  Tell 10.1.2.0

9	7.765000	ca:04:1a:b4:00:08	ca:03:1a:b4:00:06	ARP	60	10.1.2.1 is at ca:04:1a:b4:00:08

Ну и далее:

52	21.839000	10.1.2.0	10.1.2.1	ICMP	114	Echo (ping) request  id=0x0004, seq=0/0, ttl=255

Ethernet II, Src: ca:03:1a:b4:00:06 (ca:03:1a:b4:00:06), Dst: ca:04:1a:b4:00:08 (ca:04:1a:b4:00:08)

53	21.859000	10.1.2.1	10.1.2.0	ICMP	114	Echo (ping) reply    id=0x0004, seq=0/0, ttl=255

Ethernet II, Src: ca:04:1a:b4:00:08 (ca:04:1a:b4:00:08), Dst: ca:03:1a:b4:00:06 (ca:03:1a:b4:00:06)

Комментарии, я думаю, излишни.

xscrew ★★
()
Ответ на: комментарий от AS

По-другому я не представляю пока, как объяснить.

Я все таки надеюсь вы не троллите и шутки тут не разводите, потому как схема-то обычная и самая элементарная. И сказать я не знаю, что еще - все в сообщении выше.

xscrew ★★
()
Ответ на: комментарий от xscrew

То, что Ethernet - ни разу не point-to-point

А с этим кто-то спорит? Ну и что мешает работе?

То, что поведение не определено. В RFC 3021 написано совершенно чётко: Point-to-Point Links.

потому как схема-то обычная и самая элементарная.

Схема отнюдь не самая обычная и самая элементарная, потому как что такое хост (/32) понятно, что такое минимальная сеть (/30) понятно тоже, а вот что такое /31 не очень понятно. И если Циска что-то там такое себе придумала, не факт, что кто-то другой себе такое придумал тоже.

AS ★★★★★
()
Ответ на: комментарий от AS

То, что поведение не определено.

Скажите, чем отличается это от обычного поведения? Ну стандартного поведения, arp запроса xxxx.xxxx.xxxx -> ffff.ffff.ffff, arp ответа yyyy.yyyy.yyyy -> xxxx.xxxx.xxxx и так далее? Ничем, все тоже самое. Более того, где у вас, даже в случае /30 сети в подобном используется адрес сети или broadcast, отсутствующие в случае /31?

И если Циска что-то там такое себе придумала, не факт, что кто-то другой себе такое придумал тоже.

Ну хорошо, еще тоже самое себе (1 в 1) придумал Juniper и нормально функционирует, даже в случае juniper <-p2p-> cisco.

xscrew ★★
()
Ответ на: комментарий от xscrew

веселья ради

cisco

R#show running-config interface FastEthernet0/1.500
Building configuration...

Current configuration : 100 bytes
!
interface FastEthernet0/1.500
 encapsulation dot1Q 500
 ip address x.y.16.1 255.255.255.0
end

R#show ip route x.y.16.255
Routing entry for x.y.16.0/24
  Known via "connected", distance 0, metric 0 (connected, via interface)
  Routing Descriptor Blocks:
  * directly connected, via FastEthernet0/1.500
      Route metric is 0, traffic share count is 1

R#ping x.y.16.255

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to x.y.16.255, timeout is 2 seconds:

Reply to request 0 from x.y.16.19, 1 ms
Reply to request 0 from x.y.16.20, 1 ms
Reply to request 1 from x.y.16.20, 1 ms
Reply to request 1 from x.y.16.19, 1 ms
Reply to request 2 from x.y.16.19, 1 ms
Reply to request 2 from x.y.16.20, 1 ms
Reply to request 3 from x.y.16.19, 1 ms
Reply to request 3 from x.y.16.20, 1 ms
Reply to request 4 from x.y.16.20, 1 ms
Reply to request 4 from x.y.16.19, 4 ms

juniper

fun@r2> show configuration interfaces vlan unit 14  
family inet {
    address x.y.64.1/25;
}

fun@r2> show route x.y.64.127 

inet.0: 67 destinations, 67 routes (67 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

x.y.64.0/25    *[Direct/0] 2w0d 09:24:18
                    > via vlan.14

fun@r2> ping x.y.64.127 count 4    
PING x.y.64.127 (x.y.64.127): 56 data bytes
64 bytes from x.y.64.87: icmp_seq=0 ttl=64 time=2.089 ms
64 bytes from x.y.64.66: icmp_seq=0 ttl=255 time=3.880 ms (DUP!)
64 bytes from x.y.64.87: icmp_seq=1 ttl=64 time=1.734 ms
64 bytes from x.y.64.66: icmp_seq=1 ttl=255 time=1.901 ms (DUP!)
64 bytes from x.y.64.87: icmp_seq=2 ttl=64 time=1.618 ms
64 bytes from x.y.64.66: icmp_seq=2 ttl=255 time=1.958 ms (DUP!)
64 bytes from x.y.64.87: icmp_seq=3 ttl=64 time=3.171 ms

--- x.y.64.127 ping statistics ---
4 packets transmitted, 4 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 1.618/2.336/3.880/0.789 ms

P.S. вопрос на засыпку. Почему большие провайдеры для Ethernet стыков используют /30, неужели там неучи и бездари ?

pr0mille
()
Ответ на: комментарий от xscrew

Скажите, чем отличается это от обычного поведения?

Тем, что, например, 10.1.2.1/31 может быть воспринято, как броадкаст и так и использовано, со всеми вытекающими.

Ну хорошо, еще тоже самое себе (1 в 1) придумал Juniper и нормально
функционирует, даже в случае juniper <-p2p-> cisco.

Могу, даже, допустить, что не придумали, а списали. Тем не менее, я тут посмотрел, Циска честно предупреждает при попытке назначить на ethernet IP с маской 255.255.255.254.

AS ★★★★★
()
Ответ на: комментарий от AS

Да, конечно. IP инкапсулирован в Ethernet. На то ARP и нужен, чтобы узнать нужный MAC.

Т.е. клиент в IP-пакете к гетевею вообще IP-адрес гетевея не указывает, что ли? Но тогда, получается, правильно не будет работать схема, где на одном MAC'е висят два разных IP (двух разный гетевеев). Вы точно уверены в том, что в IP-пакете к шлюзу (IP пакет для внешнего хоста) нет IP самого шлюза?

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от ae1234

Это решение я и сам знал. И написал, что не могу его использовать.
Извините, если Вы приняли мою критику за грубость, я этого не хотел. В случае наличия у Вас других решений, с удовольствием бы их выслушал.

ktulhu666 ☆☆☆
() автор топика
Ответ на: комментарий от ktulhu666

каких других - чем ebtables то не устраивает ?

сначала разрешаеш - каким ip ходить на какие другие ip локальные
потом запрещаеш из локальной сети ходить на туже локальную суть (чтоб не ходили по неразрешенным соседям)
а потом разрешаеш все (чтобы ходили в инет)

вот 3 блока в фаерволе - простейшая задача - в чем вопрос то ?

ae1234 ★★
()
Ответ на: комментарий от pr0mille

Почему большие провайдеры для Ethernet стыков используют /30

Видел и /30 и /31. За /30 мотивировали как gut praktisch.

xscrew ★★
()
Ответ на: комментарий от AS

Тем, что, например, 10.1.2.1/31 может быть воспринято, как броадкаст и так и использовано, со всеми вытекающими.

Я думаю, оборудование, когда на интерфейс навешиваешь /31 сеть понимает как с этим обращаться.

Тем не менее, я тут посмотрел, Циска честно предупреждает при попытке назначить на ethernet IP с маской 255.255.255.254.

Да предупреждает, сам видел, но тут нет. Видимо от версии IOSа зависит.

r1(config)#interface Fa
r1(config)#interface FastEthernet 0/1
r1(config-if)#ip add
r1(config-if)#ip address 10.1.2.0 255.255.255.254
r1(config-if)#^Z
xscrew ★★
()
Ответ на: комментарий от ktulhu666

Как тогда быть с номером сети и броадкаст-адресом?

/31 для p2p соединений. Там не нужен номер сети и броадкаст.

Было утверждение, что на L2 имеет место быть широковещательный трафик - по дампам это не так.

В общем, не знаю что еще добавить, потому как спор ни о чем получается: работает и работает, но зависит от поддержки оборудованием. Хотите использовать /31 - используйте, нет - ваш выбор /30.

xscrew ★★
()
Ответ на: комментарий от AS

И если Циска что-то там такое себе придумала

проверил у нас на сети на цисках и на свичах huawei - всё работает,
то есть, скорее всего, все более менее свежие железки более менее крупных вендоров умеют так

zolden ★★★★★
()

Один IP можно назначить только одному интерфейсу.

IP-это атрибут хоста а не интерфейса. По факту - ты занимаешься херней и онанируешь на бредовую изначально идею. Но если ты хочешь анонировать и дальше, то делается это так:

1. Коммутатор с поддержкой VLAN'ов.

2. Один порт (к которому подключен маршрутизатор) делается тегированым

3. На сервере для каждого VLAN'а заводится тегированный интерфейс - в результате на сервере будет столько интерфейсов, сколько клиентов + 2 (аплинк и loopback)

vlan2 = eth0,802.1q,tag=2
vlan3 = eth0,802.1q,tag=3
vlan4 = eth0,802.1q,tag=4
...
vlan255 = eth0,802.1q,tag=255

4. На коммутаторе для каждого клиента создается по одному VLAN'у, в который включается нетегированый порт к которому подключен клиент и тегированый порт к которому подключен маршрутизатор. В результате количество VLAN'ов на свиче будет N-1 (N=количество портов)

VLAN2 = 802.1q ID=2 ports=Eth0[Tagged],Eth1
VLAN3 = 802.1q ID=3 ports=Eth0[Tagged],Eth2
VLAN4 = 802.1q ID=4 ports=Eth0[Tagged],Eth3
...
VLAN255 = 802.1q ID=255 ports=Eth0[Tagged],Eth254

5. Каждому клиенту присваивается свой IP-адрес с маской 255.255.255.255 - например, на виртуальный адаптер на Microsoft Loopback Adpater - например 192.168.1.23/255.255.255.255

6. Серверу указывается свой IP-адрес на виртуальном интерфейсе (каком-нибудь br123) - например, 192.168.1.1/255.255.255.255

Интерфейсы реально подключенные к свичу НЕ ИМЕЮТ привязаных IP-адресов. В результате клиент имеет примерно такую конфигурацию:

lo = 127.0.0.1/24
virti0 = 192.168.1.23/32
eth0 = no IP

Сервер имеет примерно такую конфигурацию:

lo = 127.0.0.1/24
br123 = 192.168.1.1/32
vlan1 = no IP
vlan2 = no IP
...
vlanN = no IP

Дальше тривиально - на клиенте (если клиент линукс): route add -net 192.168.1.0/255.255.255.0 dev eth0 gw 192.168.1.1 Если на клиенте винда:

route print => смотрим номер Ethernet интерфейса  =>
route add 192.168.1.0 mask 255.255.255.0 192.168.1.1 iif <номер_eth-интерфейса>

На сервере:

route add -host 192.168.1.2 dev vlan2
route add -host 192.168.1.3 dev vlan3
route add -host 192.168.1.4 dev vlan4
...
route add -host 192.168.1.23 dev vlan23
...
route add -host 192.168.1.255 dev vlan255

Всё. Далее на сервере всё просто фильтруешь в цепочке FORWARD. Задача для школьника.

no-dashi ★★★★★
()
Ответ на: комментарий от no-dashi

По факту - ты занимаешься херней и онанируешь на бредовую изначально идею

Тут все так рьяно помогали ТСу отстрелить себе ногу, а ты взял и всё испортил
Хотя потом ты взял себя в руки, молодец

zolden ★★★★★
()
Ответ на: комментарий от xscrew

В мире куча производителей оборудования и на juniper & cisco мир клином не сошелся. Где гарантия,что все умеют эту фичу ? Где гарантия,что у клиента такое будет уметь? что если клиент сменить устройство на то которое не умеет, Вам сеть перенастраивать?

pr0mille
()
Ответ на: комментарий от pr0mille

В мире куча производителей оборудования и на juniper & cisco мир клином не сошелся. Где гарантия,что все умеют эту фичу ? Где гарантия,что у клиента такое будет уметь? что если клиент сменить устройство на то которое не умеет, Вам сеть перенастраивать?

Изначально разговор был про то, возможно ли /31 на интерфейс, если да - то как это работает. Очевидно что можно и что это работает. Все.

Остальные переживания поддерживает/не поддерживает/а что если - это уже другая тема.

xscrew ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.