LINUX.ORG.RU
ФорумAdmin

Не работает proxy arp


0

0

Есть выданный провайдером внешний IP (x.x.x.x), который как бы отдан локальному компу (через DNAT). Особенность заключается в том, что маршрут к этому IP со стороны провайдера прописан не через шлюз, а напрямую.
Поэтому при попытке переслать пакеты на этот IP, шлюз провайдера шлёт ARP-запрос "IP x.x.x.x, скажи свой MAC-адрес" в сторону моего шлюза.
На что мой шлюз должен ответить своим MAC-адресом и принять пакет.
И проблема как раз в том, что он почему-то этого не делает, не шлёт ARP-ответов.

Пробовал делать так:

arp -Ds x.x.x.x eth1 pub
sysctl net.ipv4.conf.eth1.proxy_arp=1

eth1 - карточка, смотрящая в сторону провайдера.

Запускаю "tcpdump -ni eth1 arp" и вижу одни ARP-запросы для x.x.x.x, ответов - ноль.
Ядро 2.4.31, ARP на интерфейсе не запрещен.

Пробовал сделать аналогичное (для теста) на своей рабочей тачиле (ядро 2.6.19.2) - результат тот же.

Раньше такое на этом же шлюзе, на этом же ядре заводилось с полпинка... Мой мозг уже сломался: в упор не понимаю в чем может быть проблема. Google тоже ничем не помог. Есть у кого-нибудь какие-нибудь мысли ?

★★★★★

Вы как-то так все смешано изложили... мне даже интересно стало.

Что из себя предсталяет "мой шлюз"?

Команда tcpdump где выполнялась?

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

Схема простая (помимо DNAT-а, есть и такой вариант):

         (eth0) x.x.x.1       x.x.x.2 (eth1)
+-----------------+              +----------+        +------------------+
| шлюз провайдера |--------------| мой шлюз |--------|  локальная сеть  |
+-----------------+              +----------+        +--+---------------+
                                                        |
                                                        | x.x.x.3
                                                     +--+-------+
                                                     | local PC |
                                                     +----------+

Адреса x.x.x.1, x.x.x.2 и x.x.x.3 реальные.
Маршрут к x.x.x.3 у провайдера прописан примерно так:
route add -host x.x.x.3 dev eth0
Т.е. шлюз провайдера ожидает видеть x.x.x.3 напрямую.
А мне надо сделать так, чтоб при ARP-запросе со стороны провайдера,
мой шлюз говорил, что у x.x.x.3 MAC-адрес eth1.
Таким образом шлюз провайдера будет знать кому непосредственно передавать эти пакеты.
А когда мой шлюз примет их примет, далее (сделать DNAT или просто маршрутизировать) уже дело техники.

> Что из себя предсталяет "мой шлюз"?
linux, ядро 2.4.31

> Команда tcpdump где выполнялась?
На моем шлюзе

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

Ух, как-то я забыл про эту тему... извините.

У меня похожая конструция работала так:

Положим на "моем шлюзе" есть два интерфейса: eth1 и eth2. Тогда надо включить proxy_arp на обоих, включить forward и прописать два маршрута "в обе стороны". Это все работает без подмены адресов - DNAT. Такая конструкция превращает "мой шлюз" в прозрачный мост и арпы работают именно как Вам нужно.

Маршруты типа такого route add host x.x.x.1 ... dev eth1 и route add host x.x.x.3 ... dev eth2

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

Хотя все что я описал, Вы еще лучше меня похоже знаете... в общем у меня нет идей почему нет арп ответов. Смотрите в систему что может душить.

Моей схеме iptables не нужны совсем - может стоит попробовать?

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