LINUX.ORG.RU
ФорумAdmin

Как два байта переслать?


0

0

Дано: Шлюз на Ubuntu 10.04 с pppoe подключением и wifi адаптером D-Link DWA-140 Ноутбук с чипом atheros.

Надо: чтобы на ноуте был интернет по wifi.

Что делаю: На шлюзе поднимаю iptables с 2 простыми правилами: iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE (SNAT тоже пробовал...) iptables -A FORWARD -t mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Задаю параметры сети (именно с такими параметрами работает сеть в Вин7 на шлюзе, но пробовал и другие подсети, в том числе 0):

шлюз: IP: 192.168.8.1 Маска: 255.255.255.0

ноутбук: IP: 192.168.8.2 Маска: 255.255.255.0 Шлюз: 192.168.8.1 DNS: 192.168.8.1 (dnsmasq есть и работает, другие dns пробовал тоже, что впрочем не важно, почему - понятно будет дальше)

iptables на ноутбуке девственно чист.

Форвардинг на шлюзе включен. ipv6 выключен

С ноутбука пингуются: 192.168.8.1 и мой внешний IP И всё. Все внешнии айпишники молчат как рыбы. Даже P-t-P прова.

При этом судя по трассировке пакеты уходят в правильном направлении, а судя по статистике, ещё и возвращаются на головную машину-шлюз.

Ставлю WireShark. Смотрю: Пакеты идут вроде бы правильно и даже доходят до 192.168.8.2, но такое ощущение, что не попадают в юзерспэйс, при этом в ЭТОЙ же сети, но когда шлюз win7 - всё нормально.

Смотрю пакет ICMP (пинг яндекса на всех интерфейсах) - при входе на ppp0 он 100 байт, данные 58 байт, на wlan0 шлюза он 98  байт, данные 58 байт и идентичны пришедшим на ppp0. Чексуммы верны. На ноуте на wlan0 пакет уже 96 байт, данные 56 байт - два последних байта потеряны, в остальном идентичны. Чексумма небьётся и пакет выбрасывается, недоходя до юзерспейс. C TCP та же какртина — пакеты долетают укороченные на 2 байта.  WireShark их обзывает Malformed packet.

В итоге инета нет. Напомню, что пакеты генеримые на шлюзе (например пинг 192.168.8.1) проходят нормально.

Загруженные модули драйвера: # lsmod | grep rt28

rt2870sta             461811  0 
rt2800usb              31531  0 
rt2x00usb               9703  1 rt2800usb 
rt2x00lib              27509  2 rt2800usb,rt2x00usb 
crc_ccitt               1339  1 rt2800usb
Пробовал оставлять только rt2870sta - после горячей выгрузки модуля rt2800usb не пашет соединение вообще, хотя лампочка мигает,  после перезагрузки работает с тем же эффектом. Пробовал оставлять только rt2800usb - после горячей выгрузки модуля rt2870sta или  после перезагрузки работает с тем же эффектом.

frag[mentation_threshold] стоит в off, но пробовал 746,750,1500. MTU ppp0 - 1492 MTU wlan0 - 1500, но пробовал 1492, 1502, 1532, 1572

# iwconfig

lo        no wireless extensions. 

eth0      no wireless extensions. 

wlan0     IEEE 802.11bgn  ESSID:"alex-home-network"   
          Mode:Ad-Hoc  Frequency:2.412 GHz  Cell: 42:1A:40:DB:86:DF   
          Tx-Power=1 dBm   
          Retry  long limit:7   RTS thr:off   Fragment thr:off 
          Encryption key:off 
          Power Management:on 
           
ppp0      no wireless extensions.

# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:18:f3:fb:34:42   
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:1289238 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:1814045 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:220326001 (220.3 MB)  TX bytes:2090110135 (2.0 GB) 
          Interrupt:25 Base address:0x4000 

lo        Link encap:Локальная петля (Loopback)   
          inet addr:127.0.0.1  Mask:255.0.0.0 
          UP LOOPBACK RUNNING  MTU:16436  Metric:1 
          RX packets:4714 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:4714 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:0 
          RX bytes:702100 (702.1 KB)  TX bytes:702100 (702.1 KB) 

ppp0      Link encap:Протокол PPP (Point-to-Point Protocol)   
          inet addr:77.66.146.126  P-t-P:80.80.111.68  Mask:255.255.255.255 
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1 
          RX packets:904719 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:1244988 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:3 
          RX bytes:162007120 (162.0 MB)  TX bytes:1367376813 (1.3 GB) 

wlan0     Link encap:Ethernet  HWaddr 00:1e:58:ad:c1:08   
          inet addr:192.168.8.1  Bcast:192.168.8.255  Mask:255.255.255.0 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1 
          RX packets:21856 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:33813 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:1000 
          RX bytes:1731766 (1.7 MB)  TX bytes:3543916 (3.5 MB)

Есть идеи?

>Как два байта переслать?

как два байта обос...

//sry, не сдержался :)

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

... провести ещё одно подключение от другого прова, купить винду - не предлагать, извините.

У меня уже есть необходимое оборудование, и я просто хочу чтобы оно работало. И не его вина, что оно не пашет. Просто мне не хватает компетентности и единственное верное решение здесь - научится, понять и пофиксить.

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

Я плохо разбираюсь во всём этом и если вы дадите пример как задампить только ICMP на заданном интерфейсе я справлюсь гораздо быстрее, не сочтите просьбу за наглость.

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

По поводу задампить:
tcpdump -i интерфейс icmp
А так могу еще посоветовать сделать одинаковым mtu на всех интерфейсах, через к-рые все это дело форвардится, в вашем случаее на wlan0 и на винде поставьте 1492

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

ой, у вас же не винда на ноуте, тем легче mtu поставить))

Os1r1s ()

mtu не при чем, если я правильно вижу

если все, как говоришь «почти работает»

смотри, что на шлюзе твориться, netstat... etc..

а вообще нужен дамп пакетов

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

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

Os1r1s ()

Дайте сюда выхлоп:
iptables -t filter -vnL
iptables -t nat -vnL
cat /proc/sys/net/ipv4/ip_forward

WhiteWolf ()

Если пинговать совсем короткими пакетами (ping -s 1) ?

mky ★★★★★ ()

как два байта обос...

Рад, что вы оценили юмор ;)

tcpdump -i интерфейс icmp

Доберусь до дома - сделаю.

А так могу еще посоветовать сделать одинаковым mtu на всех

Пробовал - не помогает. И одинаковый и +40 и +80 и даже +2 - один хрен.

Дайте сюда выхлоп:

iptables -t filter -vnL

iptables -t nat -vnL

Я писал:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE (SNAT тоже пробовал...)

iptables -A FORWARD -t mangle -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Это действительно так - там нет других правил. Таблица filter пуста. Если не верите могу привести выхлоп вечером.

cat /proc/sys/net/ipv4/ip_forward

Форвардинг включен.

Поймите правильно - я не пытаюсь экономить своё время непредоставлением полной инфы. Просто сообщение получилось слишком длинным и так и я не стал приводить выхлопы комманд результат которых мне полностью ясен - я описал это словами, для сокращения объёма. Т.е. - если я пишу, что форвардинг включен - то я имею ввиду, что выхлоп на предыдущую комманду «1» и это 100% Кроме того, я пишу, что ответы возвращаются даже на ноут, но повреждёнными - я вижу это в WireShark и это ещё раз подтверждает, что форвардинг работает.

Если пинговать совсем короткими пакетами (ping -s 1) ?

Хм. Не пробовал... вечером обязательно сделаю.

Спасибо всем кто откликнулся.

Suntechnic ★★★★★ ()

Было бы еще хорошо, если бы была возможность проверить работу ната на проводной сети без участия wifi адаптера, сразу станет меньше мест, где можно искать проблему.

Os1r1s ()

убери -t mangle из этого правила iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

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

убери -t mangle из этого правила iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Есть мнение, что это работает только в mangle... Впрочем я пробовал помещать правило в filter - не помогло.

Suntechnic ★★★★★ ()

Почему бы не использовать настройки NAT из стандартной поставки pppd?

Кстати, как настроены политики для очередей? В частности для FORWARD?

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

tcpdump icmp пакетов:

wlan0 клиента:

20:05:37.318474 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    alex-laptop.local > alex-desktop.local: ICMP echo request, id 44066, seq 1, length 64
20:05:37.322927 IP (tos 0x0, ttl 64, id 46325, offset 0, flags [none], proto ICMP (1), length 84)
    alex-desktop.local > alex-laptop.local: ICMP echo reply, id 44066, seq 1, length 64
.......................................................................................
20:05:48.355240 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 29)
    alex-laptop.local > google-public-dns-a.google.com: ICMP echo request, id 45603, seq 4, length 9
20:05:48.430829 IP truncated-ip - 2 bytes missing! (tos 0x0, ttl 242, id 0, offset 0, flags [DF], proto ICMP (1), length 29)
    google-public-dns-a.google.com > alex-laptop.local: [|icmp]
.......................................................................................
20:06:19.366278 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    alex-laptop.local > www.yandex.ru: ICMP echo request, id 47908, seq 10, length 64
20:06:19.402783 IP truncated-ip - 2 bytes missing! (tos 0x0, ttl 57, id 12276, offset 0, flags [none], proto ICMP (1), length 84)
    www.yandex.ru > alex-laptop.local: ICMP echo reply, id 47908, seq 10, length 64

wlan0 шлюза:

20:01:21.474761 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    alex-laptop.local > alex-desktop.local: ICMP echo request, id 44066, seq 1, length 64
20:01:21.474788 IP (tos 0x0, ttl 64, id 46325, offset 0, flags [none], proto ICMP (1), length 84)
    alex-desktop.local > alex-laptop.local: ICMP echo reply, id 44066, seq 1, length 64
.......................................................................................
20:01:32.510995 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 29)
    alex-laptop.local > google-public-dns-a.google.com: ICMP echo request, id 45603, seq 4, length 9
20:01:32.583919 IP (tos 0x0, ttl 242, id 0, offset 0, flags [DF], proto ICMP (1), length 29)
    google-public-dns-a.google.com > alex-laptop.local: ICMP echo reply, id 45603, seq 4, length 9
.......................................................................................
20:02:03.523005 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    alex-laptop.local > www.yandex.ru: ICMP echo request, id 47908, seq 10, length 64
20:02:03.556657 IP (tos 0x0, ttl 57, id 12276, offset 0, flags [none], proto ICMP (1), length 84)
    www.yandex.ru > alex-laptop.local: ICMP echo reply, id 47908, seq 10, length 64

Для экономии объёма оставил по одному запросу-ответу для 3 пингов. Что удалять в дампе ppp0 не знаю, а весь не помещается... Чуть позже выложу куда-нибудь целиком. Теперь сам вижу, что NAT ставит во все пакеты DF. Но у меня же есть соответствующее правило!

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

Почему бы не использовать настройки NAT из стандартной поставки pppd?

Кстати, как настроены политики для очередей? В частности для FORWARD?

Можно в обоих местах поточнее?

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