LinuxForum.Fans
Тема

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

Автор: dr_Faust 3 сообщений 2430 просмотров
#42152

Дано:
Шлюз на 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

text
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, 1532, 1572

# iwconfig

text
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

text
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)

Есть идеи?

#42204

В iptables работа с фрагментироваными пакетами в цепочке FORWARD есть?

text
iptables -t filter -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clam-mss-to-pmtu
#42238

Это вроде бы не работает в filter...
А в mangle есть.

dr.Faust написал:
На шлюзе поднимаю 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
Войдите или зарегистрируйтесь, чтобы ответить.