Jump to content

Recommended Posts

Posted

По мотивам этой статьи

VLAN на пользователя: архитектура и альтернативы

захотелось провести небольшой эксперимент.

 

только вместо L3 свича Linux box, как сделать Proxy ARP между сегментами понятно,

 

а как скзать что пришедший ARP запрос на интерфейс нужно отправлять обратно в сегмент ?

 

 

Posted

Стандартными средствами, насколько я знаю - никак. Либо писать демона, который будет отвечать на нужные ARP-запросы, либо патчить ядро. При этом ни в коем случае нельзя отвечать на запросы "who-has 0.0.0.0" и gratuitous ARP-запросы, где target IP == source IP. В противном случае у пользователя вылезет "Конфликт IP-адресов".

Posted

типа такого?

$EBTABLES -t nat -N reply_ir_arp
$EBTABLES -t nat -A reply_ir_arp -p arp --arp-ptype IPv4 --limit 2/second --log --log-prefix "ARR " --log-level 7 --log-arp -j CONTINUE
$EBTABLES -t nat -A reply_ir_arp -p arp --arp-ptype IPv4  -j arpreply --arpreply-mac QQ:WW:EE:RR:TT:YY # MAC интерфейса

$EBTABLES -t nat -N spoof_ir_nets_br1
$EBTABLES -t nat -A spoof_ir_nets_br1 -p arp --arp-ptype IPv4 --arp-ip-src x.x.x.208/28 --arp-ip-dst x.x.x.208/28 -j reply_ir_arp

$EBTABLES -t nat -N input_from_br1
$EBTABLES -t nat -A input_from_br1 -p arp --arp-ptype IPv4 --arp-opcode 1 ! --arp-gratuitous -j spoof_ir_nets_br1

$EBTABLES -t nat -A PREROUTING --logical-in br1 -j input_from_br1

##################

$EBTABLES -A FORWARD --logical-in br1 --logical-out br1 -j DROP

 

Только есть один минус. Если абоненту выдано 2 адреса из одной подсети на два компа дома подключенных "через свитч", например, трафик между этими компами рискует пойти через провайдера.

 

Posted
типа такого?

$EBTABLES -t nat -N reply_ir_arp
$EBTABLES -t nat -A reply_ir_arp -p arp --arp-ptype IPv4 --limit 2/second --log --log-prefix "ARR " --log-level 7 --log-arp -j CONTINUE
$EBTABLES -t nat -A reply_ir_arp -p arp --arp-ptype IPv4  -j arpreply --arpreply-mac QQ:WW:EE:RR:TT:YY # MAC интерфейса

$EBTABLES -t nat -N spoof_ir_nets_br1
$EBTABLES -t nat -A spoof_ir_nets_br1 -p arp --arp-ptype IPv4 --arp-ip-src x.x.x.208/28 --arp-ip-dst x.x.x.208/28 -j reply_ir_arp

$EBTABLES -t nat -N input_from_br1
$EBTABLES -t nat -A input_from_br1 -p arp --arp-ptype IPv4 --arp-opcode 1 ! --arp-gratuitous -j spoof_ir_nets_br1

$EBTABLES -t nat -A PREROUTING --logical-in br1 -j input_from_br1

##################

$EBTABLES -A FORWARD --logical-in br1 --logical-out br1 -j DROP

 

Только есть один минус. Если абоненту выдано 2 адреса из одной подсети на два компа дома подключенных "через свитч", например, трафик между этими компами рискует пойти через провайдера.

в точку, что называется снимаю шляпу, незнал что так с iptables можно

 

Posted
типа такого?

$EBTABLES -t nat -N reply_ir_arp
$EBTABLES -t nat -A reply_ir_arp -p arp --arp-ptype IPv4 --limit 2/second --log --log-prefix "ARR " --log-level 7 --log-arp -j CONTINUE
$EBTABLES -t nat -A reply_ir_arp -p arp --arp-ptype IPv4  -j arpreply --arpreply-mac QQ:WW:EE:RR:TT:YY # MAC интерфейса

$EBTABLES -t nat -N spoof_ir_nets_br1
$EBTABLES -t nat -A spoof_ir_nets_br1 -p arp --arp-ptype IPv4 --arp-ip-src x.x.x.208/28 --arp-ip-dst x.x.x.208/28 -j reply_ir_arp

$EBTABLES -t nat -N input_from_br1
$EBTABLES -t nat -A input_from_br1 -p arp --arp-ptype IPv4 --arp-opcode 1 ! --arp-gratuitous -j spoof_ir_nets_br1

$EBTABLES -t nat -A PREROUTING --logical-in br1 -j input_from_br1

##################

$EBTABLES -A FORWARD --logical-in br1 --logical-out br1 -j DROP

 

Только есть один минус. Если абоненту выдано 2 адреса из одной подсети на два компа дома подключенных "через свитч", например, трафик между этими компами рискует пойти через провайдера.

Это на каждом интерфейсе надо проделать?

Posted (edited)
в точку, что называется снимаю шляпу, незнал что так с iptables можно
Это в ebtables.

спасибо, хорошее название :),

и хороший пакет я уже посмотрел документацию по нему

 

Это на каждом интерфейсе надо проделать?
насколько я понял из описания только на том где нужен local proxy Edited by packetizer
Posted (edited)

Это я не разобравшись запостил. Немного поигрался, на одном интерфейсе получилось сделать правда с некоторым использованием бубна. Но это от того что в первый раз. Еще поиграюсь попробовав что обязательно в найденой последовательности стучания в бубен, а что нет и уже решу как проще прикрутить.

Остался вопрос с производительностью этого решения

Edited by Beginner
Posted

ebtables -A FORWARD --logical-in br1 --logical-out br1 -j DROP

 

Это правило, насколько я понял, запрещает коммутировать пакеты между интерфейсами входящими в br1?

А если там только 1 eth интерфейс, то его можно опустить?

Posted

Beginner

если там один интерфейс, то правила можно переписать на 1 интерфейс и обойтись без брижда.

 

Производительность должна быть "обычной".

 

Кстати, забыл еще один момент - надо отключить "Send ICMP redirects" на интерфейсе.

 

Posted (edited)
Beginner

если там один интерфейс, то правила можно переписать на 1 интерфейс и обойтись без брижда.

 

Производительность должна быть "обычной".

 

Кстати, забыл еще один момент - надо отключить "Send ICMP redirects" на интерфейсе.

А вот у меня почему то не получилось на 1 интерфейсе. Прикручивал напрямую к eth.xx - не заработало. Включил eth0.xx в brxx - не заработало. Перенес IP-адрес с eth0.xx на brxx - заработало.

 

Пробовал на Debian

Linux router 2.6.26-2-amd64 #1 SMP Wed Aug 19 22:33:18 UTC 2009 x86_64 GNU/Linux

 

Буду стучать в бубен дальше :)

Edited by Beginner
Posted
А вот у меня почему то не получилось на 1 интерфейсе. Прикручивал напрямую к eth.xx - не заработало. Включил eth0.xx в brxx - не заработало. Перенес IP-адрес с eth0.xx на brxx - заработало.

 

Пробовал на Debian

Linux router 2.6.26-2-amd64 #1 SMP Wed Aug 19 22:33:18 UTC 2009 x86_64 GNU/Linux

 

Буду стучать в бубен дальше :)

а у вас свич который собирает в Sub вланы в Super влан

отдает Super c тегом или нет ?

 

 

Posted
http://ebtables.sourceforge.net/examples/b...tml#ex_nobridge

Я правильно понял, что поднимать бридж все равно придется?

Да, ebtables на не-bridge интерфейсах, к сожалению, не работает.

Кстати, если бы кто-нибудь показал, как его этому научить, было бы здорово.

Posted

Странно

 

~ # ping 10.6.66.3

PING 10.6.66.3 (10.6.66.3) 56(84) bytes of data.

From 10.6.66.1: icmp_seq=1 Redirect Host(New nexthop: 10.6.66.3)

From 10.6.66.1: icmp_seq=2 Redirect Host(New nexthop: 10.6.66.3)

From 10.6.66.1: icmp_seq=3 Redirect Host(New nexthop: 10.6.66.3)

From 10.6.66.1: icmp_seq=4 Redirect Host(New nexthop: 10.6.66.3)

From 10.6.66.1: icmp_seq=5 Redirect Host(New nexthop: 10.6.66.3)

From 10.6.66.1: icmp_seq=6 Redirect Host(New nexthop: 10.6.66.3)

From 10.6.66.1: icmp_seq=8 Redirect Host(New nexthop: 10.6.66.3)

64 bytes from 10.6.66.3: icmp_seq=10 ttl=63 time=0.372 ms

From 10.6.66.1: icmp_seq=11 Redirect Host(New nexthop: 10.6.66.3)

64 bytes from 10.6.66.3: icmp_seq=11 ttl=63 time=0.330 ms

64 bytes from 10.6.66.3: icmp_seq=12 ttl=63 time=0.538 ms

64 bytes from 10.6.66.3: icmp_seq=13 ttl=63 time=0.494 ms

64 bytes from 10.6.66.3: icmp_seq=14 ttl=63 time=0.449 ms

64 bytes from 10.6.66.3: icmp_seq=15 ttl=63 time=0.412 ms

 

хотя

~# cat /proc/sys/net/ipv4/conf/br1/send_redirects

0

~# cat /proc/sys/net/ipv4/conf/eth0.666/send_redirects

0

~# brctl show

bridge name bridge id STP enabled interfaces

br1 8000.00093d1326f9 no eth0.666

 

Posted (edited)
Beginner, /proc/sys/net/ipv4/conf/{all,default}/send_redirects не пробовали крутить?

Вроде помогло. Значит на всех выключить, а если понадобится, то включать на отдельных?

Edited by Beginner
  • 2 years later...
Posted

Только есть один минус. Если абоненту выдано 2 адреса из одной подсети на два компа дома подключенных "через свитч", например, трафик между этими компами рискует пойти через провайдера.

Ап :)

Подскажите, как разрулить проблему описанную выше?

Есть несколько вланов объединенных в бридж.

Пытался маркировать arp request в ячейке INPUT, а на выходе в ячейке OUTPUT фильтровать по маркировке.

Я так понимаю, что мне надо маркировать только арп реквесты на входе, а на выходе дропать реплай маркированные.

Делаю так:

ebtables -I INPUT -i vlan100 -p ARP --arp-opcode Request -j mark --set-mark 100

ebtables -A OUTPUT -o vlan100 -p ARP --arp-opcode Reply --mark 100 -j DROP

В инпут попадает, а вот в аутпут нет.

В чем засада?

Posted

В инпут попадает, а вот в аутпут нет.

В чем засада?

А где вообще сказано, что ebtables умеет определять связь между входящими-исходящими пакетами

и автоматически назначать метку с одного пакета на другой?

Posted

В инпут попадает, а вот в аутпут нет.

В чем засада?

А где вообще сказано, что ebtables умеет определять связь между входящими-исходящими пакетами

и автоматически назначать метку с одного пакета на другой?

Согласен, затупил.

Возможно есть другое решение?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.