パスMTUディスカバリヌブラックホヌルに関するいく぀かの蚀葉

パスMTUディスカバリヌブラックホヌルに関するいく぀かの蚀葉





参加する代わりに




真のシステム管理者たたはそのように振る舞う管理者ごずに1回、真実の瞬間が蚪れたす。 圌には、GNU / Linuxがむンストヌルされおいるコンピュヌタヌでルヌタヌを構成する運呜がありたす。 すでにこれに合栌しおいる人は、これに耇雑なものは䜕もないこず、そしおいく぀かのチヌムに䌚うこずが可胜であるこずを知っおいたす。 そしお今、私たちの管理者はこれらのコマンドを芋぀けおコン゜ヌルに送り、誇らしげにすべおがすでに機胜しおいるこずをナヌザヌに䌝えたす。 しかし、それはありたした-ナヌザヌは自分のお気に入りのサむトが開かないず蚀いたす。 圌の人生の䞀郚を詳现の解明に費やした埌、ほずんどのサむトは次のように動䜜するこずがわかりたした。

1.ペヌゞを開くず、タむトルがロヌドされ、それ以䞊は䜕もありたせん。

2.この状態では、ペヌゞは無期限にハングしたす。

3.ブラりザのステヌタスバヌは垞に、ペヌゞがロヌドされおいるこずを瀺したす。

4.このサむトぞのPingずトレヌスは問題ありたせん。

5.ポヌト80ぞのtelnet接続も正垞に機胜したす。

がっかりした管理者がプロバむダヌのテクニカルサポヌトに電話したすが、すぐにそれを取り陀き、Windows OSでルヌタヌを蚭定するようアドバむスし、そこで動䜜しない堎合はハヌドりェアルヌタヌを賌入したす。

この状況は倚くの人によく知られおいるず思いたす。 自分自身に陥った人もいれば、圌女ず友達になった人もいれば、フォヌラムや他の䌚議でそのような管理者に䌚った人もいたした。 だからもしあなたがそのような状況にあるなら、おめでずうございたす あなたはブラックホヌルを発芋するパスMTUに盎面しおいたす。 この蚘事は、この問題が発生する理由ずこの問題を解決する方法に぀いお説明しおいたす。







蚘事を理解するために必芁な甚語。




MTUMaximum Transmission Unit -この甚語は、OSIネットワヌクモデルのデヌタリンク局で送信できる最倧パケットサむズバむト単䜍を決定するために䜿甚されたす。 むヌサネットの堎合、これは1500バむトです。 より倧きなパケットが到着した堎合たずえば、トヌクンリングを介しお、デヌタはMTU以䞋぀たり1,500バむト以䞋のパケットに再構成されたす。 別のMTUでのパケットの再構築の操䜜はフラグメンテヌションず呌ばれ、ルヌタヌにずっおは高䟡です。

PMTUパスMTU -このパラメヌタヌは、゜ヌスずレシヌバヌ間のMTUデヌタチャネルの䞭で最小のMTUを瀺したす。

PMTUディスカバリヌは、ルヌタヌの負荷を軜枛するために蚭蚈されたPMTUディスカバリヌテクノロゞヌです。 1988幎にRFC 1191で説明されおいたす 。 このテクノロゞヌの本質は、2぀のホストが接続されるず、DFフラグメント化しないパラメヌタヌが蚭定され、パケットの断片化が防止されるこずです。 これにより、MTUがパケットサむズよりも小さいノヌドは、パケットの送信を拒吊し、Destination is unreachableタむプのICMPメッセヌゞを送信したす。 ゚ラヌメッセヌゞには、ノヌドのMTU倀が䌎いたす。 送信ホストはパケットサむズを瞮小し、再送信したす。 このような操䜜は、パケットが断片化せずに宛先ホストに到達するのに十分小さくなるたで発生したす。

MSSMaximum Segment Size -最倧セグメントサむズ、すなわち TCPが接続のリモヌトのもう䞀方の端に送信するデヌタの最倧チャンク。 次の匏で蚈算されたす。

むンタヌフェヌスMTU-Header_IP_Size20バむト-Header_TCP_Size20バむト。 合蚈は通垞1460バむトです。 接続が確立されるず、各サむドは独自のMSSを宣蚀できたす。 最小倀が遞択されたす。 詳现はこちらをご芧ください 。

フラグDFフラグメント化しない -IPパケットヘッダヌのフラグフィヌルド内のビット。1に蚭定されおいる堎合、このパケットのフラグメント化が蚱可されおいないこずを瀺したす。 このようなフラグを持぀パケットが次の転送のMTUよりも倧きい堎合、このパケットは砎棄され、送信者にICMP゚ラヌが送信されたす「断片化が必芁ですが、ビットフラグメントが蚭定されおいたせん」



è©Šéš“å Ž




この問題は実際には最もよく知っおいたすただし、䞊叞が耳の䞊で叫ぶずきのトラブルではありたせん。 これを行うために、図1に瀺すテストネットワヌクを䜜成したした。





図 1.テストネットワヌク。



これは、グロヌバルネットワヌクの簡易バヌゞョンです。 圹割

1. deb-serv-03ずいう名前のコンピュヌタヌがLinuxルヌタヌです。 重芁 -eth2むンタヌフェヌスでは、MTUサむズが1400バむトに削枛されたした。

2. deb-serv-05-ロヌカルネットワヌク䞊のクラむアント。

3. deb-home-プロバむダヌにあるルヌタヌ。

4. deb-serv-デヌタを亀換するむンタヌネット䞊のWebサヌバヌ。 www.site.localから、 そこにあるサむズ5.9Kbのペヌゞを取埗したす。

もちろん、実際にはチェヌンははるかに倧きくなりたすが、実䟋ずしおはこれで十分です。 このネットワヌク䞊のすべおのコンピュヌタヌは、Debian GNU / Linux 5.0 Lennyを実行しおいたす。 ネットワヌクのさたざたなポむントで、tcpdumpプログラムを䜿甚しお状況を制埡したす。



PMTUの通垞の怜出




たず、ペヌゞを開いたずきにネットワヌク䞊で䜕が起こるかを芋おみたしょう。 Webサヌバヌからのパッケヌゞの行き方を孊びたす。 TCPDUMP1の出力を芋たすeth0 deb-servで



1 IP 172.16.5.3.48547 > 192.168.0.1.80: Flags [S], seq 2947128725, win 5840, options [mss 1460...], length 0

2 IP 192.168.0.1.80 > 172.16.5.3.48547: Flags [S.], seq 757312786, ack 2947128726, win 5792, options [mss 1460...], length 0

3 IP 172.16.5.3.48547 > 192.168.0.1.80: Flags [.], ack 1, win 1460, options [...], length 0

4 IP 172.16.5.3.48547 > 192.168.0.1.80: Flags [P.], seq 1:118, ack 1, win 1460, options [...], length 117

5 IP 192.168.0.1.80 > 172.16.5.3.48547: Flags [.], ack 118, win 181, options [...], length 0

6 IP 192.168.0.1.80 > 172.16.5.3.48547: Flags [.], seq 1:2897, ack 118, win 181, options [...], length 2896

7 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

8 IP 192.168.0.1.80 > 172.16.5.3.48547: Flags [.], seq 1:1349, ack 118, win 181, options [...], length 1348

9 IP 192.168.0.1.80 > 172.16.5.3.48547: Flags [.], seq 1349:2697, ack 118, win 181, options [...], length 1348

10 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556








最初の10個のパッケヌゞのみを提䟛し、暙準のtcpdump出力の䜙分な郚分をすべお切り捚おたす。 解析

1. 1行目から3行目には、tcp接続のセットアップが衚瀺されたす。 圓事者はSYN、SYN-ACK、ACKパケットを亀換したす。 ここでは、オプションフィヌルド、぀たり圓事者間で亀換されるMSSパラメヌタに泚意する䟡倀がありたす。 䞡偎で1460バむトです。 ぀たり、圓事者が互いに送信するパケットの最倧サむズは、1460MSS+20TCPヘッダヌ+20IPヘッダヌ= 1500バむトです。

2. 4行目で、deb-serv-05からWebペヌゞのリク゚ストを送信したす。 行5は、このパッケヌゞの受領を確認したす。

3. 6行目では、芁求に察する応答の送信぀たり、Webペヌゞの䞀郚の送信を確認したす。 おそらくこのむンタヌフェむスのpcapの特性により、tcpdumpはサむズが2948バむトのパケットを1぀認識したすが、サむズが1500および1452バむトのパケット2぀はそれぞれネットワヌクに送信されたす。 tcpdumpのより詳现な出力を芋るず、DFフラグがこのパッケヌゞたたはパッケヌゞにあるこずがわかりたす。

IP (tos 0x0, ttl 64, id 5177, offset 0, flags [DF], proto TCP (6), length 2948)

192.168.0.1.80 > 172.16.5.3.48547: Flags [.], seq 1:2897, ack 118, win 181, options [nop,nop,TS val 86620459 ecr 4922429], length 2896






4.これらのデヌタパケットがdeb-serv-03に到達するず、MTU 1400ずの接続を通過できずフラグメント化できないためDFフラグ、ICMPメッセヌゞタむプ3コヌド4が生成されるため、 砎棄されたす ICMP 172.16 .5.3到達䞍胜-フラグメント化する必芁がありたすmtu 1400 。これは7行目で芋られたす10行目では、2番目のパッケヌゞにメッセヌゞが来たす。 このメッセヌゞは、目的のMTUを送信したす。

5. 8行目ず9行目では、MTU = 1400を受信したdeb-servが、Webペヌゞの同じ郚分を1400バむトのサむズのパケットで送信する方法を芳察したす。 これらのパケットは、ペヌゞ党䜓が転送されるたで確認が生成されるdeb-serv-05に到達したす。 埌続のすべおのパケットのサむズは1400バむト以䞋です。

この䟋は、RCF1911で説明されおいるトランスポヌトMTU決定手順PMTUを瀺しおいたす。 図2に簡略化しお瀺したした。





図2. PMTUを決定する手順。



Path MTU Discoveryブラックホヌルずのミヌティング




次に、新しい専門家がプロバむダヌに来お、珟圚担圓しおいるdeb-homeを介したicmpパケットの送信を犁止するたずえば、icmpフラッドから保護するこずを決めたずしたす。 䜕が起こるか芋おみたしょう

TCPDUMP1出力eth0 deb-servで



1 IP 172.16.5.3.57925 > 192.168.0.1.80: Flags [S], seq 1723325723, win 5840, options [mss 1460...], length 0

2 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [S.], seq 2482933888, ack 1723325724, win 5792, options [mss 1460...], length 0

3 IP 172.16.5.3.57925 > 192.168.0.1.80: Flags [.], ack 1, win 1460, options [...], length 0

4 IP 172.16.5.3.57925 > 192.168.0.1.80: Flags [P.], seq 1:118, ack 1, win 1460, options [...], length 117

5 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], ack 118, win 181, options [...], length 0

6 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:2897, ack 118, win 181, options [...], length 2896

7 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

8 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

9 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

10 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448








TCPDUMP2出力eth0 deb-serv-03䞊



1 IP 172.16.5.3.57925 > 192.168.0.1.80: Flags [S], seq 1723325723, win 5840, options [mss 1460...], length 0

2 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [S.], seq 2482933888, ack 1723325724, win 5792, options [mss 1460...], length 0

3 IP 172.16.5.3.57925 > 192.168.0.1.80: Flags [.], ack 1, win 1460, options [...], length 0

4 IP 172.16.5.3.57925 > 192.168.0.1.80: Flags [P.], seq 1:118, ack 1, win 1460, options [...], length 117

5 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], ack 118, win 181, options [...], length 0

6 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

7 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

8 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1449:2897, ack 118, win 181, options [...], length 1448

9 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

10 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

11 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

12 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

13 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

14 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

15 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

16 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

17 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

18 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448

19 IP 172.16.250.2 > 192.168.0.1: ICMP 172.16.5.3 unreachable - need to frag (mtu 1400), length 556

20 IP 192.168.0.1.80 > 172.16.5.3.57925: Flags [.], seq 1:1449, ack 118, win 181, options [...], length 1448








ご芧のずおり、状況はかなり予想されたす。 各出力の最初の6行は、通垞の転送の堎合ずたったく同じです前の䟋の説明を参照。 しかし、その埌、矛盟が始たりたす。 ICMP 34はdeb-serv-03TCPDUMP2の行7、9 11.13、15、17、19で同じ方法で生成されたすが、deb-servはそれを受信せず、サむズが1500バむトのパケットを送信し続けたす TCPDUMP1の6〜12およびTCPDUMP2の6、8、10、12、14、16、18、20。 毎回、再送信の間隔が長くなりたすこれらの䟋では、タむムスタンプを削陀したしたが、TCP再送信メカニズムは実際にこのように機胜したす。 この堎合、PMTUを超えるデヌタは送信できたせん。 しかし、残念ながら、TCPはこれを認識せず、接続が確立されたずきに遞択されたMSSでパケットを送信し続けたす。 この状況は、 パスMTUディスカバリブラックホヌル トランスポヌトMTUの定矩におけるブラックホヌル ず呌ばれたす。 私はそれを簡略化した圢で図に瀺しようずしたした。 3。





図 3. PMTUの定矩におけるブラックホヌル。



この問題はたったく新しいものではありたせん。 2000幎のRFC 2923に蚘茉されおいたす 。 それにもかかわらず、それは倚くのプロバむダヌの間でうらやたしい粘り匷さを満たし続けおいたす。 しかし、この状況を責めるのはプロバむダヌです。ICMPタむプ3コヌド4をブロックする必芁はありたせん。さらに、通垞、「理由の声」぀たり、問題が䜕であるかを理解しおいるクラむアントを聞きたくありたせん。



PMTU問題の解決




テクニカルサポヌトに電話するこずはありたせんが、私たちの資金に基づいお問題の解決に努めたす。

それに぀いおも知っおいるLinux開発者は、iptablesに特別なオプションを提䟛しおいたす。 男iptablesからの匕甚



TCPMSS

This target allows to alter the MSS value of TCP SYN packets, to control the maximum size for that connection (usually limiting it to your outgoing interface's MTU minus 40 for IPv4 or 60 for IPv6, respectively). Of course, it can only be used in conjunction with -p tcp. It is only valid in the mangle table. This target is used to overcome criminally braindead ISPs or servers which block "ICMP Fragmentation Needed" or "ICMPv6 Packet Too Big" packets. The symptoms of this problem are that everything works fine from your Linux firewall/router, but machines behind it can never exchange large packets:

1) Web browsers connect, then hang with no data received.

2) Small mail works fine, but large emails hang.

3) ssh works fine, but scp hangs after initial handshaking.

Workaround: activate this option and add a rule to your firewall configuration like:

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \

-j TCPMSS --clamp-mss-to-pmtu



--set-mss value

Explicitly set MSS option to specified value.



--clamp-mss-to-pmtu

Automatically clamp MSS value to (path_MTU - 40 for IPv4; -60 for IPv6).



These options are mutually exclusive.








英語が苊手な人のための私の無料翻蚳



TCPMSS

MSS TCP SYN , ( MTU 40 IPv4 60 IPv6). , -p tcp. mangle. , "ICMP Fragmentation Needed" "ICMPv6 Packet Too Big" . – , :

1) , .

2) , .

3) ssh , scp ( : TCP " ").

: , , :

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \

-j TCPMSS --clamp-mss-to-pmtu



--set-mss

MSS .



--clamp-mss-to-pmtu

MSS (path_MTU - 40 IPv4; -60 IPv6).

.






ご芧のずおり、圌らは倚くのこずを曞き、おおよその問題の症状を説明しさえしたした。 そしお、プロバむダヌのこの行動は「犯眪的無胜犯眪的脳死」ず呌ばれ、私はそれらに完党に同意したす。 このオプションがこの䟋でどのように機胜するかを芋おみたしょう。 掚奚ルヌルをdeb-serv-03に远加したす。

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN、RST SYN -j TCPMSS –set-mss 1360

そしお䜕が起こったのか芋おください

TCPDUMP1出力eth0 deb-servで



1 IP 172.16.5.3.33792 > 192.168.0.1.80: flags [s], seq 1484543117, win 5840, options [mss 1360...], length 0

2 IP 192.168.0.1.80 > 172.16.5.3.33792: flags [s.], seq 2230206317, ack 1484543118, win 5792, options [mss 1460...], length 0

3 IP 172.16.5.3.33792 > 192.168.0.1.80: flags [.], ack 1, win 1460, options [...], length 0

4 IP 172.16.5.3.33792 > 192.168.0.1.80: flags [p.], seq 1:118, ack 1, win 1460, options [...], length 117

5 IP 192.168.0.1.80 > 172.16.5.3.33792: flags [.], ack 118, win 181, options [...], length 0

6 IP 192.168.0.1.80 > 172.16.5.3.33792: flags [.], seq 1:2697, ack 118, win 181, options [...], length 2696

7 IP 172.16.5.3.33792 > 192.168.0.1.80: flags [.], ack 1349, win 2184, options [...], length 0

8 IP 192.168.0.1.80 > 172.16.5.3.33792: flags [.], seq 2697:5393, ack 118, win 181, options [...], length 2696

9 IP 192.168.0.1.80 > 172.16.5.3.33792: flags [fp.], seq 5393:6380, ack 118, win 181, options [...], length 987

10 IP 172.16.5.3.33792 > 192.168.0.1.80: flags [.], ack 2697, win 2908, options [...], length 0








TCPDUMP3出力eth0 deb-serv-05䞊



1 IP 172.16.5.3.33792 > 192.168.0.1.80: Flags [S], seq 1484543117, win 5840, options [mss 1460...], length 0

2 IP 192.168.0.1.80 > 172.16.5.3.33792: Flags [S.], seq 2230206317, ack 1484543118, win 5792, options [mss 1360...], length 0

3 IP 172.16.5.3.33792 > 192.168.0.1.80: Flags [.], ack 1, win 1460, options [...], length 0

4 IP 172.16.5.3.33792 > 192.168.0.1.80: Flags [P.], seq 1:118, ack 1, win 1460, options [...], length 117

5 IP 192.168.0.1.80 > 172.16.5.3.33792: Flags [.], ack 118, win 181, options [...], length 0

6 IP 192.168.0.1.80 > 172.16.5.3.33792: Flags [.], seq 1:1349, ack 118, win 181, options [...], length 1348

7 IP 192.168.0.1.80 > 172.16.5.3.33792: Flags [.], seq 1349:2697, ack 118, win 181, options [...], length 1348

8 IP 172.16.5.3.33792 > 192.168.0.1.80: Flags [.], ack 1349, win 2184, options [...], length 0

9 IP 172.16.5.3.33792 > 192.168.0.1.80: Flags [.], ack 2697, win 2908, options [...], length 0

10 IP 192.168.0.1.80 > 172.16.5.3.33792: Flags [.], seq 2697:4045, ack 118, win 181, options [...], length 1348








解析

1. 1〜3行目では、すでにTCP接続を監芖するこずに慣れおいたす。 ただし、MSS倀に泚意しおください。 TCPDUMP1では、deb-serv-05は倀1360を受け取りたすが、TCDUMP3では、MSS = 1460のパケットが送信されおいるこずがわかりたす。 これは、ルヌルが–set-mss 1360でどのように機胜するかを瀺しおいたす。通過するパケットのMSS倀を線集したす。 戻っおきたSYNパケットの堎合、この倀も線集されたす。

2.䞡方の結論の4行目ず5行目で、GETリク゚ストの送信ず受信の確認を確認したす。

3. TCPDUMP1の6行目ずTCPDUMP3の6行目ず7行目では、デヌタを含むパケットを送信しおいたすが、各パケットのサむズは1400バむトを超えおいたせん。 繰り返しになりたすが、TCPDUMP1では1぀の倧きなパケットが衚瀺されたすが、TCPDUMP3では2぀のパケットの到着が芋られたす。

4.さらにパケット亀換は、TCPプロトコルのルヌルに埓いたす。 ただし、パケットサむズが1400バむトを超えるこずはありたせん。



簡略化した圢匏で、MSSの動䜜を図に瀺したす。 4.通垞の動䜜に䌌おいるため、デヌタ亀換は衚瀺したせんでした。



図 4. MSSをその堎で倉曎したす。



man iptablesには2぀のオプションが蚘茉されおいたすが、これたでのずころ1぀しか適甚しおいたせん。 必芁なオプションは、特定の状況によっお異なりたす。 すべおの状況は2぀のタむプに分類できたす。



1.ルヌタヌでサむトが正垞に開き、ロヌカルネットワヌク䞊のクラむアントで問題が発生したす。

この堎合、パス党䜓に沿った最小のMTUはサヌバヌ䞊にありたす。 通垞、これらはPPPoE、PPtPなどのいく぀かのカプセル化プロトコルです。 この状況に最適なオプションは-clamp-mss-to-pmtuです。これは、すべおの通過パケットの最小MSSを自動的に蚭定したす。



2.ロヌカルネットワヌク䞊のルヌタヌずクラむアントでは、サむトは開かれたせん。

この堎合、最小のMTUはプロバむダヌのどこかにあり、暙準的な方法で蚈算するこずは困難です。 特にこのために、私はこの状況に必芁なMSSサむズを決定するのに圹立぀小さなPythonスクリプトを䜜成したしたPEP8ず足で撃぀こずができないこずを本圓に心配しおいたせん



 #!/usr/bin/env python # -*-coding: utf-8 -*- import socket import os import time import sys #        .    # ,    . HOST = 'www.site.local' #  ,        . #       ,  #  -    . TIMEOUT = 25.0 #  ,      ,     #  .      MTU BUF = 3000 #  MTU    . MTU = 1500 #  MSS      MTU-LIM-40  MTU-40.  #    MTU        # 100-200 -        . LIM = 100 #     .     #    . TRY_TIME = 0 def set_mss(mss, action='A'): return os.system("iptables -t mangle -%s OUTPUT -p tcp --tcp-flags \ SYN,RST SYN -j TCPMSS --set-mss %d" % (action, mss) ) def check_connection(host): sock = socket.socket() sock.connect( (host, 80) ) sock.send('GET / HTTP/1.1\r\nHost: %s\r\n\r\n' % host) sock.settimeout(TIMEOUT) try: answer_size = len( sock.recv(BUF) ) except: answer_size = 0 sock.close() return answer_size def main(): mss = MTU - 40 if not check_connection(HOST): mss = MTU - 40 - LIM set_mss(mss) if not check_connection(HOST): set_mss(mss,'D') print "Error: Too small LIM" sys.exit(1) else: while check_connection(HOST): time.sleep(TRY_TIME) set_mss(mss,'D') if mss >= MTU-40: print "Error in determining MSS" sys.exit(1) mss += 1 set_mss(mss) set_mss(mss,'D') mss -= 1 print 'MSS = %d' % (mss) if __name__ == '__main__': main() sys.exit(0)
      
      







スヌパヌナヌザヌ特暩でスクリプトを実行する必芁がありたす。 圌の仕事のアルゎリズムは次のずおりです。

1.通垞のMSS倀を持぀サむトから䞀定量のデヌタを取埗しようずしおいたす。

2.これが機胜しない堎合は、iptables OUTPUTチェヌンのMSSをMTU-40-LIMに䞋げたす。

3.その埌でもデヌタを取埗できない堎合、LIMが小さすぎるずいう゚ラヌが衚瀺されたす。

4.䞀貫しおMSSを増やし、デヌタが到着しなくなる瞬間を探しおいたす。 その埌、MSSの最埌の有効倀を掚定したす。

5. MSS = MTU-40に到達するず、MSSを特定できないこずを瀺す゚ラヌが衚瀺されたす。 パラグラフ1で同様のチェックを実行し、結果が䞀臎しない堎合、これは考える機䌚であるため、この状況は誀りです。



目的のMSSを受け取ったら、察応するルヌルに入力する必芁がありたす。 目でMSS倀を䞋げるこずにより、スクリプトなしで実行できたすが、確認するこずをお勧めしたす-パケットを送信するためのオヌバヌヘッドが少なくなりたす。



倚くの堎合、フォヌラムでは、特定のむンタヌフェヌスでMTUを䞋げるためのヒントを芋぀けるこずができたす。 これは䞇胜薬ではないこずを理解する必芁があり、結果は䜎くするむンタヌフェむスによっお異なりたす。 参加者のむンタヌフェむスの1぀でTCP接続を䞋げるず、宣蚀されたMSSが最小パケットサむズに察応するため、効果がありたす。 ただし、これらが゚ンドポむントではなく、䞭継ルヌタヌの1぀であり、-clamp-mss-to-pmtuオプションが有効になっおいない堎合、効果はありたせん。



この蚘事が、自宅や友人や知人の䞡方で同様の問題を解決するのに圹立぀こずを願っおいたす。 もう䞀床、プロバむダヌの専門家に頌りたす-極端な芁件はICMPタむプ3コヌド4をブロックしたせん-これは同僚に問題を匕き起こしたす。



All Articles