LINUX.ORG.RU
ФорумAdmin

Роутинг пакетов без NAT

 , , , ,


1

3

Здравствуй, ЛОР

Очень нужно настроить роутинг между TAP и WLAN карточками. Причем без NAT. Бридж не работает(а именно, не добавляется WLAN), гуглил, везде какие-то костыли.

Насколько я понимаю, если net.ipv4.ip_forward установить в 1, то с пустыми правилами iptables пакеты должны ходить между всеми интерфейсами в системе. Однако на практике они не попадают на другой интерфейс.

Возможно, следует копать в сторону ebtables и изменять mac-адреса, однако я совершенно не разбираюсь в протоколах канального уровня. Поэтому надеюсь на совет от знающего человека ;)

Дистр - ArchLinux.

Бридж не работает(а именно, не добавляется WLAN), гуглил, везде какие-то костыли.

как не работает? Что делаешь, что пишет?

копать в сторону ebtables

ebtables = ethernet bridge tables т.е. управляет только интерфейсами внутри bridge

Deleted
()
Ответ на: комментарий от Deleted
root@BaseComp / # brctl addbr br0
root@BaseComp / # brctl addif br0 tap0
root@BaseComp / # brctl addif br0 wlp5s0
can't add wlp5s0 to bridge br0: Operation not supported
1 root@BaseComp / #                
knifemaster
() автор топика
Ответ на: комментарий от knifemaster

Хм, забавно на ноуте та-же ситуация происходит.

02:00.0 Network controller: Intel Corporation Centrino Advanced-N + WiMAX 6250 [Kilmer Peak] (rev 5e)
        Subsystem: Intel Corporation Centrino Advanced-N + WiMAX 6250 2x2 ABG
        Kernel driver in use: iwlwifi
Как быстрое решение могу посоветовать создать 2 подсети(для eth и wlan), да понадобится dhcp на двух интерфейсах запускать, и между ними разрешить прохождение пакетов.

Deleted
()
Последнее исправление: log4tmp (всего исправлений: 1)
Ответ на: комментарий от knifemaster

Не нужно. DHCP работает на канальном уровне, потому на каждый интерфейс по своему dhcp со своей подсетью.

Еще вот накопал по ошибке.

iw dev wlan0 set 4addr on

у меня после этого wlan0 добавился в br0

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

Мне нужно, что бы DHCP заработало ;) Вроде бы IP будет достаточно.

Тогда есть несколько вариантов, но самый простой - это поставить DHCP на шлюзе. А именно isc-dhcp-server и выдать на каждый интерфейс свою подсеть.

Способы посложнее есть тоже, это настроить на шлюзе ретрансляцию 67 и 68 портов UDP.

rezedent12 ☆☆☆
()
Последнее исправление: rezedent12 (всего исправлений: 1)

Если надо, чтобы dhcp сервер, находящийся в одном сегменте Ethernet, выдавал адреса хостам, находящимся в другом сегменте, нужен dhcp релей, подключенный к этому второму сегменту, и имеющий ip connectivity до dhcp сервера. Хосты в этом другом сегменте будут слать запросы бродкастом, их будет ловить релей, и пересылать юникастом до сервера. Сервер будет юникастом отвечать релею, релей будет пересылать ответ исходному хосту. Адрес сервера настраивается на релее.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: комментарий от rezedent12

Проблема кстати даже не в DHCP вроде. Пакеты между интерфейсами ходить не хотят. Может, я что-то делаю не так?

На хосте пишу(tap0-к виртуалке):

sysctl -w net.ipv4.ip_forward=1
ip link set dev tap0 up
ip addr add 192.168.2.1/24 dev tap0

На виртуалке:

ip addr add 192.168.2.2/24 dev ens3
ip route add 192.168.1.0/24 via 192.168.2.1

Запуская iptables -L -v, я вижу, что пакеты в FORWARD летают, однако до интерфейса другой подсети не доходят

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

Зачем вы назначаете ip-адреса из одной подсети на разные интерфейсы?

Если вы хотите заменить бриджевание маршрутизацией, то нужно прописывать маршруты до компов (/32), и на интерфейс назначать /32, и не забыть про arp (ip neigh add proxy).

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

И dhcp у вас маршрутизироваться не будет, он ведь идёт на broadcast-адрес, они не маршрутизируются.

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

Пример не тот что я ожидал. У тебя хост и виртуалка. А я то думал в сети не меньше 3 компьютеров.

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

mky

Зачем вы назначаете ip-адреса из одной подсети на разные интерфейсы?

ens3 на виртуалке = tap0 на хосте.

Нагуглил proxy_arp, хочу попробовать, как домой приду.

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

ens3 на виртуалке = tap0 на хосте.

Из вашего ответа не ясно, поняли ли вы, что так делать смысла нет. При добавлении адреса на интерфейс с указанием маски (/24) одновременно появляется маршрут в эту сеть через этот интерфейс. Когда на второй интерфейс добавляется адрес из этой же подсети, то новый маршрут переписывает старый. Дальше, надеюсь, понятно?

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

Может я чего-то не так понимаю, но интерфейсы tap0 и ens3 находятся на разных машинах вообще: tap0 - на хосте, а ens3 - на виртуалке. Т.о. на хосте только tap0 имеет адрес из подсети 192.168.2.x, реальный интерфейс(wifi-карточка) смотрит в подсеть 192.168.1.x. Я хочу, чтобы хост выступал шлюзом в подсеть 192.168.1.x для подсети 192.168.2.x. При этом без маскарадинга(с маскарадингом делал, все работало, разница с тем, что описал выше - в два правила iptables).

Никогда не поднимал шлюзы, поэтому и спрашиваю.

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

У FORWARD политика ACCEPT, а то обычно DROP? И на компьютерах сети 192.168.1.x нужно прописывать маршрут к 192.168.2.x.

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

Политики по умолчанию стоят, все ACCEPT.

Т.е. я должен прописать статические маршруты на всех устройствах сети? В т.ч. и в консоли роутера?

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

По хорошему на всех устройствах, как минимум на маршрутизаторе, через который у остальных устройст прописан маршрут по умолчанию. В последнем случае маршрутизатор будет генерировать icmp-redirect, который все игнорируют, но работать будет.

Поэтому уж лучше прописать виртуалки ip-адрес из сети 192.168.1.0/32, у хоста маршрут на этот ip-адрес, и arp запись для этого адреса на ethernet-интерфейсе.

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

Прописал маршруты, по ходу дела немного погуглил и вник в роутинг пакетов. Вроде я всё правильно делал, но пакеты не шли. Однако, когда ушел обедать и забыл завершить ping, обнаружил, что пакеты изредка всё же проходят, плюс иногда пишет что-то про нехватку буфера. Как я понял, причина в самой wifi-карточке, она дропает пакеты почему-то.

Подключил свой nexus 4,раздал сеть через USB, отключил на телефоне маскарадинг и прописал маршрут в сеть 192.168.2.x. После добавил маршруты до usb сети телефона(192.168.42.x) и до сети 192.168.2.x. И пакеты пошли на ура.

Написал скрипт, который при запуске виртуалки стартует интерфейсы и прописывает маршруты на роутере через telnet, а после отключения виртуалки возвращает всё на свои места.

Ваш способ мне понравился.Потом попробую и его. Один вопрос - достаточно просто добавить запись в arp-кэш хоста, или нужно еще включить proxy_arp?

Большое спасибо за советы, сам бы разбирался гораздо дольше)

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

Достаточно одной записи. Или достаточно proxy_arp, если маршруты прописаны. Вместе, ИМХО, их лучше не применять.

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