web-dev-qa-db-ja.com

TCP Linuxラップトップで死ぬ

数日に一度、次の問題が発生します。私のラップトップ(Debianテスト)は突然インターネットへのTCP接続で動作できなくなります。

次のことが引き続き正常に機能します。

  • UDP(DNS)、ICMP(ping)—即座に応答します
  • ローカルネットワーク内の他のマシンへのTCP接続(例:隣接するラップトップにSSH接続できます)
  • 私のLAN内の他のマシンではすべて問題ありません

しかし、ラップトップからTCP接続を試みると、タイムアウトになります(SYNパケットへの応答がありません)。典型的なカール出力は次のとおりです。

% 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

接続を再起動したり、ネットワークカードカーネルモジュールをリロードしたりしても効果はありません。役立つのは再起動だけです。

明らかに私のシステムに何か問題があります(他のすべては正常に機能します)が、正確には何がわかりません。

私のセットアップは、PPPoEを介してISPに接続されているワイヤレスルーターです。

何かアドバイス?

コメントへの回答

何NICですか?

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

NIC問題が発生したときの状態はどうですか?

iptables-saveは何も出力しません。

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

マシンが通常モードで動作する場合、上記のすべてが同じです。

ifconfig —実行しましたが、再起動する前に保存するのを忘れていました。次に問題が発生するまで待つ必要があります。申し訳ありません。

QoSはありますか?

おそらくそうではありません—少なくとも私はそれを可能にするために特別に何もしていません。

インターフェイスで実際に送信されたトラフィックをスニッフィングしてみましたか?

Curlとtcpdumpを数回実行しましたが、2つのパターンがありました。

1つ目は、応答のないSYNパケットだけです。

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

2番目はこれです:

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

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         

モジュール情報

# 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 

/sys/module/brcmsmac/parametersはありません。これが私が持っているものです:

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

一部のサイトは実際に機能します

drが示唆しているように、私は他のいくつかのサイトを試しましたが、驚いたことに、それらのいくつかは実際に機能しました。機能したホストをいくつか示します。

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

そして、これはそうではなかったいくつかです:

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

ネットワークキャプチャ

ネットワークキャプチャを作成してアップロードしました ここ

17
Roman Cheplyaka

指定したキャプチャでは、2番目のパケットのSYN-ACKのタイムスタンプエコー応答が最初のパケットのSYNのTSValと一致せず、数秒遅れています。

そして、173.194.70.108と209.85.148.100の両方によって送信されるすべてのTSecrがすべて同じであり、送信するTSValとは無関係であることを確認してください。

TCPタイムスタンプと混ざり合っているようです。何が原因かわかりませんが、マシンの外部にあるようです。この場合、ルーターを再起動すると役に立ちますか?

それがあなたのマシンが(3番目のパケットで)RSTを送信する原因であるかどうかはわかりません。しかし、それは間違いなくそのSYN-ACKが好きではなく、それが私が見つけることができる唯一の問題です。私が考えることができる他の唯一の説明は、RSTを送信しているのがあなたのマシンではないが、SYN-ACKとRSTの時間差が与えられている場合、私はそうは思わないでしょう。しかし念のため、このマシンで仮想マシン、コンテナ、またはネットワーク名前空間を使用していますか?

TCP timestampsを完全に無効にして、それが役立つかどうかを確認することができます。

Sudo sysctl -w net.ipv4.tcp_timestamps=0

したがって、これらのサイトは偽のTSecrを送信するか、途中で発信TSValまたは着信TSecrのいずれかをマングルする何か(途中のルーター、または透過プロキシ)、または偽のTCPスタック。推測できるtcpタイムスタンプを壊す理由:バグ、侵入検出回避、スマートすぎる/偽のトラフィックシェーピングアルゴリズム。これは私が以前聞いたことのないことです(しかし、私は専門家ではありません)件名に)。

さらに調査する方法:

  • TPLinkルーターが原因であるかどうかを確認し、リセットすることで外部のトラフィックが役立つかどうかを確認します。可能であれば、タイムスタンプが壊れているかどうかを確認します。
  • TTLで遊んだり、Webサーバーが受信した要求ヘッダーを調べたり、停止したWebサイトを要求したときの動作を確認したりして、途中で透過プロキシがあるかどうかを確認します。
  • リモートWebサーバー上のトラフィックをキャプチャして、マングルされているのがTSValまたはTSecrであるかどうかを確認します。
5

私のラップトップでもまったく同じ動作があるようです。理由はわかりませんが、ときどきgoogle.comやその他の外部リソースに接続できませんでした。 pingとDNSクエリは完全に機能します。また、私はただ1つの解決策を見つけました:再起動

私はいくつかの観察を追加することができます:

  1. Virtual Box(Windows、ArchLinux、Ubuntu)で他のOSを起動すると、問題のあるホストとのTCP接続を問題なく確立できます。
  2. インターネットの一部のホストはgoogle.comのように動作しますが、多くのホストは通常​​telnetまたはWebブラウザを使用してアクセスできます。
  3. 私のラップトップにはWIFIアダプターがありません。ルーターへのイーサネットリンクしかありません。
  4. 私はdebian/gentooユーザースペースにchrootしようとしました-それは役に立ちません
  5. NICを新しいものに交換しました-役に立ちません

私の箱に関するいくつかの技術情報:

OS:最後のArchLinux 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

このバグの多い動作は、Linuxカーネルの一部のバージョンにある微妙なバグが原因で発生すると考えられますが、この問題のデバッグ方法がわからず、再現が不安定なためにスタックします。

1
dr.

上記のチェックサムが正しくありません。そのデバイスのチェックサムオフロードはありますか(ワイヤレスデバイスがチェックサムをオフロードできることを知りませんでした)。

Sudo ethtool -k wlan0は何を教えてくれますか。オフロードがある場合は、それを無効にしてみてください。

Iptables-saveを呼び出すには、rootである必要があります。パケットがそこにマングルされている可能性はまだあります。 iptables-saveが機能しない場合は、以下を試してください。

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

ネットワークキャプチャで、宛先MACアドレスがルーターのMACアドレスと一致していますか。 UDPトラフィックとTCPトラフィック)の比較で興味深いものはありますか?

また、$devがワイヤレスアダプタのカーネルドライバ(モジュール)(ethtool -i wlan0を参照)である場合、modinfo "$dev"grep . /sys/module/"$dev"/parameters/*は何を教えてくれますか?

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

追加されるまで、あなたが説明したのと同じ問題がありました 上記 コマンド私のインターネットゲートウェイiptablesコマンド。 Inは、rp-pppoeパッケージなどにデフォルトで含まれています。ただし、カスタム構成を選択し、手動で設定しない場合、ゲートウェイの背後にあるLAN上のコンピューターに、説明した問題が発生します。

0
Kostya Berger