TCP mati pada laptop Linux

17

Sekali dalam beberapa hari saya memiliki masalah berikut. Laptop saya (pengujian Debian) tiba-tiba menjadi tidak dapat berfungsi dengan koneksi TCP ke internet.

Hal-hal berikut terus bekerja dengan baik:

  • UDP (DNS), ICMP (ping) - Saya mendapat respons instan
  • Koneksi TCP ke mesin lain di jaringan lokal (mis. Saya bisa ssh ke laptop tetangga)
  • semuanya ok untuk mesin lain di LAN saya

Tetapi ketika saya mencoba koneksi TCP dari laptop saya, mereka time out (tidak ada tanggapan terhadap paket SYN). Berikut ini adalah hasil keriting yang khas:

% curl -v google.com     
* About to connect() to google.com port 80 (#0)
*   Trying 173.194.39.105...
* Connection timed out
*   Trying 173.194.39.110...
* Connection timed out
*   Trying 173.194.39.97...
* Connection timed out
*   Trying 173.194.39.102...
* Timeout
*   Trying 173.194.39.98...
* Timeout
*   Trying 173.194.39.96...
* Timeout
*   Trying 173.194.39.103...
* Timeout
*   Trying 173.194.39.99...
* Timeout
*   Trying 173.194.39.101...
* Timeout
*   Trying 173.194.39.104...
* Timeout
*   Trying 173.194.39.100...
* Timeout
*   Trying 2a00:1450:400d:803::1009...
* Failed to connect to 2a00:1450:400d:803::1009: Network is unreachable
* Success
* couldn't connect to host
* Closing connection #0
curl: (7) Failed to connect to 2a00:1450:400d:803::1009: Network is unreachable

Memulai kembali koneksi dan / atau memuat kembali modul kernel kartu jaringan tidak membantu. Satu-satunya hal yang membantu adalah reboot.

Jelas ada yang salah dengan sistem saya (semuanya berfungsi dengan baik), tapi saya tidak tahu persis apa.

Pengaturan saya adalah router nirkabel yang terhubung ke ISP melalui PPPoE.

Ada saran?

Jawaban untuk komentar

NIC apa itu?

12:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)
  Subsystem: Dell Inspiron M5010 / XPS 8300
  Flags: bus master, fast devsel, latency 0, IRQ 17
  Memory at fbb00000 (64-bit, non-prefetchable) [size=16K]
  Capabilities: [40] Power Management version 3
  Capabilities: [58] Vendor Specific Information: Len=78 <?>
  Capabilities: [48] MSI: Enable- Count=1/1 Maskable- 64bit+
  Capabilities: [d0] Express Endpoint, MSI 00
  Capabilities: [100] Advanced Error Reporting
  Capabilities: [13c] Virtual Channel
  Capabilities: [160] Device Serial Number 00-00-9d-ff-ff-aa-1c-65
  Capabilities: [16c] Power Budgeting <?>
  Kernel driver in use: brcmsmac

Bagaimana keadaan NIC Anda saat masalah terjadi?

iptables-save tidak mencetak apa pun.

ip rule show:

0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

ip route show table all:

default via 192.168.1.1 dev wlan0 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.105 
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.1.0 dev wlan0  table local  proto kernel  scope link  src 192.168.1.105 
local 192.168.1.105 dev wlan0  table local  proto kernel  scope host  src 192.168.1.105 
broadcast 192.168.1.255 dev wlan0  table local  proto kernel  scope link  src 192.168.1.105 
fe80::/64 dev wlan0  proto kernel  metric 256 
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101 hoplimit 255
local ::1 via :: dev lo  table local  proto none  metric 0 
local fe80::1e65:9dff:feaa:b1f1 via :: dev lo  table local  proto none  metric 0 
ff00::/8 dev wlan0  table local  metric 256 
unreachable default dev lo  table unspec  proto kernel  metric 4294967295  error -101 hoplimit 255

Semua hal di atas sama ketika mesin bekerja dalam mode normal.

ifconfig- Saya menjalankannya, tetapi entah bagaimana lupa menyimpan sebelum me-reboot. Harus menunggu sampai waktu berikutnya masalah terjadi. Maaf soal itu.

Ada QoS di tempat?

Mungkin tidak - setidaknya saya belum melakukan sesuatu yang khusus untuk mengaktifkannya.

Sudahkah Anda mencoba mengendus lalu lintas yang sebenarnya dikirim pada antarmuka?

Saya berlari keriting dan tcpdump beberapa kali, dan ada dua pola.

Yang pertama adalah paket SYN tanpa jawaban.

17:14:37.836917 IP (tos 0x0, ttl 64, id 4563, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.105.42030 > fra07s07-in-f102.1e100.net.http: Flags [S], cksum 0x27fc (incorrect -> 0xbea8), seq 3764607647, win 13600, options [mss 1360,sackOK,TS val 33770316 ecr 0,nop,wscale 4], length 0
17:14:38.836650 IP (tos 0x0, ttl 64, id 4564, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.105.42030 > fra07s07-in-f102.1e100.net.http: Flags [S], cksum 0x27fc (incorrect -> 0xbdae), seq 3764607647, win 13600, options [mss 1360,sackOK,TS val 33770566 ecr 0,nop,wscale 4], length 0
17:14:40.840649 IP (tos 0x0, ttl 64, id 4565, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.105.42030 > fra07s07-in-f102.1e100.net.http: Flags [S], cksum 0x27fc (incorrect -> 0xbbb9), seq 3764607647, win 13600, options [mss 1360,sackOK,TS val 33771067 ecr 0,nop,wscale 4], length 0

Yang kedua adalah ini:

17:22:56.507827 IP (tos 0x0, ttl 64, id 41583, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.105.42036 > fra07s07-in-f102.1e100.net.http: Flags [S], cksum 0x27fc (incorrect -> 0x2244), seq 1564709704, win 13600, options [mss 1360,sackOK,TS val 33894944 ecr 0,nop,wscale 4], length 0
17:22:56.546763 IP (tos 0x58, ttl 54, id 65442, offset 0, flags [none], proto TCP (6), length 60)
    fra07s07-in-f102.1e100.net.http > 192.168.1.105.42036: Flags [S.], cksum 0x6b1e (correct), seq 1407776542, ack 1564709705, win 14180, options [mss 1430,sackOK,TS val 3721836586 ecr 33883552,nop,wscale 6], length 0
17:22:56.546799 IP (tos 0x58, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.1.105.42036 > fra07s07-in-f102.1e100.net.http: Flags [R], cksum 0xf301 (correct), seq 1564709705, win 0, length 0
17:22:58.511843 IP (tos 0x0, ttl 64, id 41584, offset 0, flags [DF], proto TCP (6), length 60)
    192.168.1.105.42036 > fra07s07-in-f102.1e100.net.http: Flags [S], cksum 0x27fc (incorrect -> 0x204f), seq 1564709704, win 13600, options [mss 1360,sackOK,TS val 33895445 ecr 0,nop,wscale 4], length 0
17:22:58.555423 IP (tos 0x58, ttl 54, id 65443, offset 0, flags [none], proto TCP (6), length 60)
    fra07s07-in-f102.1e100.net.http > 192.168.1.105.42036: Flags [S.], cksum 0x3b03 (correct), seq 1439178112, ack 1564709705, win 14180, options [mss 1430,sackOK,TS val 3721838596 ecr 33883552,nop,wscale 6], length 0
17:22:58.555458 IP (tos 0x58, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.1.105.42036 > fra07s07-in-f102.1e100.net.http: Flags [R], cksum 0xf301 (correct), seq 1564709705, win 0, length 0

keluaran ethtool

ethtool -k wlan0:

Features for wlan0:
rx-checksumming: off [fixed]
tx-checksumming: off
  tx-checksum-ipv4: off [fixed]
  tx-checksum-unneeded: off [fixed]
  tx-checksum-ip-generic: off [fixed]
  tx-checksum-ipv6: off [fixed]
  tx-checksum-fcoe-crc: off [fixed]
  tx-checksum-sctp: off [fixed]
scatter-gather: off
  tx-scatter-gather: off [fixed]
  tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
  tx-tcp-segmentation: off [fixed]
  tx-tcp-ecn-segmentation: off [fixed]
  tx-tcp6-segmentation: off [fixed]
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: off [requested on]
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: on [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]

iptables

# namei -l "$(command -v iptables)"
f: /sbin/iptables
drwxr-xr-x root root /
drwxr-xr-x root root sbin
lrwxrwxrwx root root iptables -> xtables-multi
-rwxr-xr-x root root   xtables-multi

# dpkg -S "$(command -v iptables)"
iptables: /sbin/iptables

# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
# iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
# iptables -t security -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

info modul

# ethtool -i wlan0                   
driver: brcmsmac
version: 3.2.0-3-686-pae
firmware-version: N/A
bus-info: 0000:12:00.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

# modinfo brcmsmac
filename:       /lib/modules/3.2.0-3-686-pae/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko
license:        Dual BSD/GPL
description:    Broadcom 802.11n wireless LAN driver.
author:         Broadcom Corporation
alias:          pci:v000014E4d00000576sv*sd*bc*sc*i*
alias:          pci:v000014E4d00004727sv*sd*bc*sc*i*
alias:          pci:v000014E4d00004353sv*sd*bc*sc*i*
alias:          pci:v000014E4d00004357sv*sd*bc*sc*i*
depends:        mac80211,brcmutil,cfg80211,cordic,crc8
intree:         Y
vermagic:       3.2.0-3-686-pae SMP mod_unload modversions 686 

Tidak ada /sys/module/brcmsmac/parameters. Inilah yang saya miliki di sana:

# tree /sys/module/brcmsmac
/sys/module/brcmsmac
├── drivers
│   └── pci:brcmsmac -> ../../../bus/pci/drivers/brcmsmac
├── holders
├── initstate
├── notes
├── refcnt
├── sections
│   └── __bug_table
└── uevent

Beberapa situs sebenarnya berfungsi

Seperti yang disarankan oleh dr , saya mencoba beberapa situs lain, dan saya sangat terkejut beberapa dari mereka benar-benar berfungsi. Berikut beberapa host yang berfungsi:

  • rambler.ru
  • google.ru
  • ya.ru
  • opennet.ru
  • tut.by
  • ro-che.info
  • yahoo.com
  • ebay.com

Dan ada beberapa yang tidak:

  • vk.com
  • meta.ua
  • ukr.net
  • tenet.ua
  • prom.ua
  • reddit.com
  • github.com
  • stackexchange.com

Pengambilan jaringan

Saya membuat tangkapan jaringan dan mengunggahnya di sini .

Roman Cheplyaka
sumber
1
Hanya dengan rasa ingin tahu: Bagaimana keadaan NIC Anda saat masalah terjadi? (/ sbin / ifconfig?)
yves Baumes
Pernahkah Anda mencoba mengendus lalu lintas yang sebenarnya dikirim pada antarmuka (wireshark / tcpdump ...)? NIC apa itu? Apakah nirkabel? Apa output dari iptables-save, dari ip rule show, ip route show table all. Ada QoS di tempat?
Stéphane Chazelas
Memperbarui posting dengan jawaban atas pertanyaan Anda.
Roman Cheplyaka
1
Saya tidak membuat driver dari sumber. Modul itu sendiri berasal dari stok kernel Debian (paket linux-image-3.2.0-3-686-pae), dan firmware berasal dari firmware-brcm80211paket. Apakah Anda memiliki masalah yang mirip dengan masalah saya? Saya lebih suka menghindari membuat barang dengan tangan, kecuali itu adalah masalah yang diketahui. Juga, mengapa masalah modul NIC memanifestasikan dirinya pada layer 4?
Roman Cheplyaka
1
Kemungkinan besar apa pun yang salah ada pada stasiun pangkalan, sakelar, atau router Wi-Fi Anda. Jika mungkin coba lacak paket (atau jumlah paket) di sana. Jika tidak, coba menukar mereka dengan alternatif.
bahamat

Jawaban:

5

Dalam tangkapan yang Anda berikan, Time Stamp Echo Balas di SYN-ACK di paket kedua tidak cocok dengan TSVal di SYN dalam paket pertama dan beberapa detik di belakang.

Dan lihat bagaimana semua TSecr yang dikirim oleh 173.194.70.108 dan 209.85.148.100 semuanya sama dan tidak relevan dari TSVal yang Anda kirim.

Sepertinya ada sesuatu yang berbaur dengan stempel waktu TCP. Saya tidak tahu apa yang menyebabkan itu, tetapi sepertinya ada di luar mesin Anda. Apakah me-reboot router membantu dalam hal ini?

Saya tidak tahu apakah itu yang menyebabkan mesin Anda mengirim RST (pada paket ke-3). Tapi itu pasti tidak suka SYN-ACK, dan itu satu-satunya hal yang salah yang dapat saya temukan tentang itu. Satu-satunya penjelasan lain yang bisa saya pikirkan adalah jika bukan mesin Anda yang mengirim RST tetapi mengingat perbedaan waktu antara SYN-ACK dan RST saya akan ragu begitu. Tapi untuk berjaga-jaga, apakah Anda menggunakan mesin virtual atau wadah atau ruang nama jaringan pada mesin ini?

Anda dapat mencoba menonaktifkan cap waktu TCP sama sekali untuk melihat apakah itu membantu:

sudo sysctl -w net.ipv4.tcp_timestamps=0

Jadi, baik situs-situs tersebut mengirim TSecr palsu atau ada sesuatu dalam perjalanan ke sana (router apa pun di jalan, atau proksi transparan) yang mengatur TSVal keluar atau TSecr yang masuk, atau proxy dengan tumpukan TCP palsu. Mengapa seseorang harus membuat cap waktu tcp saya hanya bisa berspekulasi: bug, penghindaran deteksi intrusi, algoritma pembentukan lalu lintas yang terlalu pintar / palsu. Itu bukan sesuatu yang pernah saya dengar sebelumnya (tapi kemudian saya bukan ahli dalam hal ini).

Cara menyelidiki lebih lanjut:

  • Lihat apakah router TPLink yang harus disalahkan mengapa menyetel ulang untuk melihat apakah itu membantu atau menangkap lalu lintas di luar juga jika mungkin untuk melihat apakah router memotong-motong cap waktu.
  • Periksa apakah ada proxy transparan dalam perjalanan dengan bermain dengan TTL, melihat header permintaan yang diterima oleh server web atau melihat perilaku ketika meminta situs web yang mati.
  • menangkap lalu lintas di server web jarak jauh untuk melihat apakah TSVal atau TSecr yang rusak.
Stéphane Chazelas
sumber
Tidak, saya tidak menjalankan vms / container. Saya akan mencoba saran Anda lain kali, terima kasih.
Roman Cheplyaka
1
Xm .. Anda saran tentang tcp_timestamps pasti memecahkan masalah saya. Tidak ada masalah dengan google dan situs web lain sama sekali setelah mengatur net.ipv4.tcp_timestamps ke 0 dan semua masalah lagi dalam kasus net.ipv4.tcp_timestamps = 1 tetapi MENGAPA?
dr.
1

Dikatakan salah checksum di atas. Apakah ada pembebanan checksum untuk perangkat itu (saya tidak tahu perangkat nirkabel dapat membongkar checksum).

Apa yang sudo ethtool -k wlan0memberitahumu. Jika ada pembongkaran, Anda mungkin ingin mencoba dan menonaktifkannya.

Anda harus melakukan root untuk memanggil iptables-save. Masih ada sedikit peluang bahwa ada sesuatu yang merusak paket di sana. Jika iptables-savetidak berhasil, coba:

iptables -nvL
iptables -t mangle -nvL
iptables -t nat -nvL
iptables -t security -nvL

Dalam tangkapan jaringan Anda, apakah alamat MAC tujuan cocok dengan router. Adakah yang menarik dalam perbandingan dari lalu lintas UDP ke lalu lintas TCP?

Juga, di mana $devdriver kernel (modul) (lihat ethtool -i wlan0) untuk adaptor nirkabel Anda, apa yang harus Anda lakukan modinfo "$dev"dan grep . /sys/module/"$dev"/parameters/*katakan?

Stéphane Chazelas
sumber
Tangkapan yang bagus! Saya tidak memperhatikan checksum yang salah. Saya akan memperbarui jawabannya dengan output ethtool. iptables-save dijalankan sebagai root, tidak mencetak apa pun. Lain kali saya akan menjalankan kembali tcpdump untuk menampilkan alamat MAC.
Roman Cheplyaka
Jika iptables-save tidak menghasilkan apa-apa, maka pasti ada sesuatu yang salah. Apa yang harus Anda lakukan namei -l "$(command -v iptables)"dan dpkg -S "$(command -v iptables)"katakan?
Stéphane Chazelas
Diposting hasilnya.
Roman Cheplyaka
Memperbarui posting dengan info modul.
Roman Cheplyaka
Terima kasih. Lihat hasil edit saya untuk jawaban saya. Bisakah Anda juga menempelkan pcap untuk tangkapan Anda di suatu tempat, atau mungkin output dari tshark -Viwlan0 tcpsalah satu paket SYN di sini?
Stéphane Chazelas
1

Sepertinya, saya memiliki perilaku yang sama persis di laptop saya juga. Saya tidak tahu alasannya, tetapi dari waktu ke waktu saya tidak dapat terhubung ke google.com dan beberapa sumber daya eksternal lainnya. Permintaan ping dan DNS bekerja dengan sempurna. Saya juga hanya menemukan satu solusi: reboot .

Saya bisa menambahkan beberapa pengamatan:

  1. Jika saya mem-boot beberapa OS lain di Virtual Box saya (Windows, ArchLinux, Ubuntu), saya bisa membuat koneksi TCP dengan host bermasalah tanpa masalah.
  2. Beberapa host di Internet berperilaku seperti google.com, tetapi ada banyak dari mereka, yang biasanya dapat diakses menggunakan telnet atau browser web
  3. Saya tidak memiliki adaptor WIFI di laptop saya, saya hanya memiliki tautan Ethernet ke router
  4. Saya sudah mencoba melakukan chroot ke ruang pengguna debian / gentoo - itu tidak membantu
  5. Saya telah mengganti NIC saya dengan yang baru - itu tidak membantu

Beberapa informasi teknis tentang kotak saya:

OS: ArchLinux Terakhir amd64

$ ethtool -i  eth0
driver: via-rhine
version: 1.5.0
firmware-version: 
bus-info: 0000:02:07.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

$uname -a
Linux eniac-2 3.5.4-1-ARCH #1 SMP PREEMPT Sat Sep 15 08:12:04 CEST 2012 x86_64 GNU/Linux

Saya kira, perilaku buggy ini terjadi karena beberapa bug halus di beberapa versi kernel Linux, tapi saya tidak tahu bagaimana cara men-debug masalah ini, dan karena mereproduksi yang tidak stabil saya terjebak.

dr.
sumber
Terima kasih telah berbagi! Apa saja contoh host yang berfungsi?
Roman Cheplyaka
Contoh host, yang berfungsi saat perilaku buggy ini terjadi: opennet.ru, tut.by.
dr.
Saya sekarang yakin bahwa kami memang memiliki masalah yang sama ...
Roman Cheplyaka
Ya! Saya setuju. Saya sedang berpikir tentang memperbarui firmware router saya pada sesuatu seperti dd-wrt atau openwrt, atau hanya menurunkan versi kernel linux. Sudahkah Anda mencoba salah satu dari langkah-langkah ini?
dr.
1
Tidak. Saya ingin mencari tahu apa yang sedang terjadi di sini.
Roman Cheplyaka
0
/sbin/iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Saya memiliki masalah yang sama seperti yang Anda gambarkan sampai menambahkan perintah di atas perintah Internet iptables gateway saya. In termasuk secara default dalam paket rp-pppoe dan lainnya. Tetapi ketika Anda pergi untuk konfigurasi khusus dan tidak mengaturnya secara manual, komputer pada LAN di belakang gateway akan memiliki masalah yang Anda jelaskan.

Kostya Berger
sumber