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 ★★★★
()

Куски tcpdump-а на ноуте, и декстопе на обеих интерфейсах покажи в момент пинга, например, 8.8.8.8

CyberTribe ★★
()
Ответ на: комментарий от 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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.