LINUX.ORG.RU
ФорумAdmin

[бред][openvpn] левые arp-запросы в туннель

 ,


0

1

Есть wifi-подключение к сети 192.168.12.0/24 и есть мой openvpn-туннель 172.16.0.0/24. Внезапно vpn перестал работать. Т.е. интерфейс поднимается, ip прописывается, всё как положено, но трафик не ходит. Запускаю сниффер и офигеваю: убунта пытается посылает arp who-has 192.168.12.1(это не гейт, но гейт посылает next hop на этот хост) в интерфейс openvpn где таких адресов отродясь не было. Какой-либо связи при этом нет, эти пакеты видны с обоих сторон туннеля.

Какого хрена она это делает? Может ли какой-нить winbindd или другая дурная софтина такое делать?

Выглядило это примерно так(подрисовал вывод как было), обратите внимание на [incomplete]:

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.12.2             ether   00:16:b6:1c:6e:8e   C                     wlan0
192.168.12.1             ether   00:40:63:fa:32:d9   C                     wlan0
192.168.12.1             ether        [incomplete]   C                       vpn

$ ifconfig exevpn
vpn       Link encap:Ethernet  HWaddr 5a:35:ca:9f:7b:05  
          inet addr:172.16.0.109  Bcast:172.16.1.255  Mask:255.255.255.0
          inet6 addr: fe80::5835:caff:fe9f:7b05/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1280 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1286 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:360509 (360.5 KB)  TX bytes:111631 (111.6 KB)

$ ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 00:13:02:4d:fa:23  
          inet addr:192.168.12.234  Bcast:192.168.12.255  Mask:255.255.255.0
          inet6 addr: fe80::213:2ff:fe4d:fa23/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23400 errors:0 dropped:23 overruns:0 frame:0
          TX packets:11590 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:20879401 (20.8 MB)  TX bytes:1783318 (1.7 MB)

Щас ребутнул тачку, покилял всё барахло что мне не нужно(ну там winbindd, gvfsd итп) и пока всё работает. В iptables-save всё чисто, ebtables вообще не установлен, в dmesg ничего подозрительного.

Меня ещё смущает что у openvpn mtu такой же как у wlan0, но на это пока пофиг.

★★★★★

Когда ты обращаешь внимание что трафик не туда побежал что говорит " ip r g 192.168.12.1" ?

Tok ★★
()

>убунта пытается посылает arp who-has 192.168.12.1(это не гейт, но гейт посылает next hop на этот хост) в интерфейс openvpn где таких адресов отродясь не было

в таких случаях надо делать ip route flush cache и затем сразу ip route get 192.168.12.1 чтобы выяснить - все ли ок с таблицей маршрутов.

Насчет MTU - можешь не париться - в данном случае пакеты ИСХОДЯЩЕГО с сервера трафика разберутся и соберутся верно. Если нужно через сервак делать forward, а вышестоящий провайдер/сетка не пропускает MTU нужного размера, то гугли как использовать TCPMSS(проблему заметишь сразу tcpdump-ом по сообщения ICMP fragmentation needed с вышестоящих хостов)

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

Tok, Pinkbyte спасибо за помощь. Вечером как вернусь в отель обязательно проверю. По ip route list проблем не было, но может что-то там хитро закэшировалось...(всё равно не понимаю КАК). Но подозрения о кэше оправданы потому что ребут иногда помогал в этой проблеме.

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

по ip route show проблема не всегда видна. Надо зрить в ip route get - там будет маршрут, который выбрало ядро и причина выборка(cached как минимум намекнет, что маршрут из кеша, а в ip route show его может и не быть)

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

Ты прав, есть вот такая байда:

# ip r g 172.16.0.1
172.16.0.1 via 192.168.12.1 dev vpn  src 172.16.0.109 
    cache <redirected>  ipid 0x4508

Только откуда она? Маны показывают что <redirected> случается от ICMP, однако снифер молчит. Т.е. я делал ip r f cache, открывал окно снифера, делал ping 172.16.0.1 и смотрел на снифер, там на счёт icmp глухо.

ip r monitor показывает 192.168.12.1 dev vpn FAILED Кстати, что такое ipid(который меняется после сброса кэшей)? Оно как-то с RTNETLINK_HAVE_PEERINFO, судя по сырцам, связано. Я даже блочил icmp, не помогает.

У меня есть подозрения что ip route flush cache не все кэши сбрасывает. Это бы всё объяснило, т.к. пока туннель не поднялся пакеты падают в wlan0 и роутер шлёт icmp redirect. Ну или какой-то роутинговый демон что-то страшное делает, но ничего такого не запущено.

Копаю в сторону ip neigh, ip link итп. Кстати, ip link show показывает для туннеля вместо статуса UP статус UNKNOWN.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte
# ip r show cache
172.16.0.1 from 172.16.0.109 via 192.168.12.1 dev vpn
    cache <redirected>  ipid 0x498b
local 127.0.0.1 from 127.0.0.1 dev lo
    cache <local>
local 172.16.0.109 dev lo  src 172.16.0.109
    cache <local>  ipid 0x64e2
79.91.228.18 from 192.168.12.235 via 192.168.12.1 dev wlan0
    cache  ipid 0x30fb rtt 3.031s rttvar 3.119s ssthresh 7 cwnd 9
local 192.168.12.235 from 79.91.228.18 dev lo  src 192.168.12.235
    cache <local>  iif wlan0
172.16.0.1 from 172.16.0.109 via 192.168.12.1 dev vpn
    cache <redirected>  ipid 0x498b
local 172.16.0.109 from 172.16.0.1 dev lo  src 172.16.0.109
    cache <local,src-direct>  iif vpn
local 192.168.12.235 from 192.168.12.1 dev lo  src 192.168.12.235
    cache <local,src-direct>  iif wlan0
192.168.12.1 from 192.168.12.235 dev wlan0
    cache  ipid 0x498a rtt 5.521s rttvar 7.384s ssthresh 5 cwnd 8
172.16.0.1 via 192.168.12.1 dev vpn  src 172.16.0.109
    cache <redirected>  ipid 0x498b

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

Кстати, ip link show показывает для туннеля вместо статуса UP статус UNKNOWN.

так, это, похоже, не тот UP о котором я думаю, т.е. это не состояние nic а состояние линка или типа того.

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

Да, поигрался и понял что маршрут реально «залипает». Стоит только пингануть тунельный гейт раньше чем поднимется туннель и запрос улетает во внутреннюю сетку отеля, оттуда гейт радостно шлёт icmp redirect(вообще дебилизм, по dhcp гейт 192.168.12.2, но он всех через icmp redirect посылает в 192.168.12.1). И после поднятия туннеля ведро всё равно пытается слать пакеты в сторону 192.168.12.1 . Есть идеи как бороться с этим? Кроме как ребутаться.

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

Прикинь, маршруты сохраняются до перезагрузки. Т.е. никакими ip r flush all|cache мне не удалось избавится от них. Я принёс ноут в другую сеть, а маршрут всё равно сам появлялся. Прошёлся по /proc в поисках рычагов на это дело, но не нашёл ничего подходящего. Пришлось ребутаться. Имхо баг.

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

Всё хуже. Я только что провёл 6 часов в попытках вынести из кэша маршрут на удалённый хост, который заворачивается ядром на loopback.

Откуда он взялся? - хз. После холодного старта в кэше его нет и маршрут отрабатывает верно - через default gw. Но после нескольких тычков пингом и telnet'ом появляется маршрут в кэше и его уже никак не вынести. ip route flush вроде всё чистит, но при первом же пакете на этот хост - всё возвращается.

net.ipv4.conf.all.accept_redirects=0 не помог.

Решилось откатом на 2.6.38 ядро. Час - стабильно. Посмотрим завтра.

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

net.ipv4.conf.all.accept_redirects=0 не помог

как оказалось, мне тоже не помог :(. Я покопался в сырцах, но безуспешно. Дальше ковырять времени нет.

Попробуй на фаерволе заблочить icmp redirect.

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

Я добавлял
-I INPUT -j DROP
-I FORWARD -j DROP
reboot
ping на хост
хост в кэше на lo)

Впечатление, что у меня его ядро вешает как direct на lo.

В любом случае откат на ядро ветки 2.6 помог.

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

Нет, но глядя на этот и твой пост решил, что походу бага и попробовал откатить ядро.

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