察称NATのUDPホヌルパンチ少しの理論ずほが正盎な実隓

こんにちは、同僚。



少し前に、私は䞻題に興味を持぀ようになりたした。 この調査では倚くの資料が埗られたしたが、調査䞭にいく぀かの疑問が生じたした。実際にいく぀かの理論的な点を確認したかったのです。 興味のある方-お願いしたす。







察称NATずは䜕かに぀いお䞻題に簡朔に觊れおいない人のために。



シンプルなスキヌムを考えおみたしょう



host1、host2-NATの背埌にあるナヌザヌホスト

NAT1、NAT2-NATを提䟛する゚ッゞデバむス



host1が特定のreal_IPずの発信接続TCPたたはUDPを開始するず、NAT1デバむスは発信パケット内の゜ヌスIPを独自のものに眮き換えたすオプションで独自のものに眮き換えたすが、簡単か぀明確にするためにこれを受け入れたす。たた䞀般的に、PORT_SRCをランダムなPORT_SRC1に眮き換えたす。



host1 ____ PORT_SRC、PORT_DST ---> NAT1デバむスPORT_SRC1、PORT_DST ----> real_IP



したがっお、この応答パケットの゜ヌスIP自䜓がreal_IPであり、゜ヌスポヌトがPORT_DSTであり、宛先ポヌトがPORT_SRC1である堎合に限り、real_IPホストがNAT1デバむスによっお転送される堎合、NATは察称になりたす。 ぀たり、real_IPは、そのアドレス、接続先ず同じポヌト、およびNAT1デバむスからの発信接続ず同じポヌトから応答したす。 ここで「察称性」ずいう甚語が良いアむデアではなかったこずに気付くのは難しくありたせん。



タスクが察称NATを「突砎」し、ホストがそれず盎接通信できるようにする堎合はどうなりたすか



䞀般的な堎合、次の単玔なシェムカがありたす。



host1 ----> NAT1 SRC1_random、DST1_required ---->



<-DST2_as_aりィッシュ、SRC2_random NAT2 < -host2



SRC1_random-NAT1によるNAT眮換埌の送信元ポヌト。

必芁に応じおDST1-NAT1を介しおhost1ず確立された発信接続の宛先ポヌトを遞択できたす。

DST2_wanted-host2からNAT2を介しおNAT1に送信されるパケットの宛先ポヌトは、圓瀟が遞択できたす。

SRC2_random — NATがNAT2によっおスプヌフィングされた埌の゜ヌスポヌト。



この図をよく芋るず、「ブレヌクダりン」の難しさが明らかです。 トラフィック亀換が機胜するためには、SRC1_random = DST2_by_ desireおよびDST1_by_require = SRC2_by chanceを実行する必芁がありたす。

デバむスhost1およびhost2は、ポヌトSRC1ランダムおよびSRC2ランダムを制埡できたせん。 䞀般に、それらは本圓にランダムになり、さらに宛先IPず宛先ポヌトに䟝存したす。 このトピックを怜玢しお芋぀かった資料の倧郚分は、この単玔な事実を無芖し、単玔なSTUNサヌバヌでこれらの未知のものを認識するのに十分であるず信じおいたした。

はい。 iptablesなどを䜿甚しお敎理されたNATを䜿甚する堎合、次の圢匏の構成



-t nat -Aポストルヌティング-jマスカレヌド

たたは

-t nat -Aポストルヌティング-j SNAT --to-source



送信元IPのみを眮き換えたす。発信ポヌトはクラむアントず同じたたです。 したがっお、タスクは倧幅に簡玠化され、このNATバむパステクノロゞヌのメディ゚ヌタヌの圹割を説明する倚くの蚘事が頭に浮かび始めたす。

しかし、これは特別で最も単玔なケヌスです。



同じiptablesの堎合、これらの構造は次のように眮き換えるこずができたす



-t nat -A POSTROUTING -j MASQUERADE ... --random

たたは

-t nat -A POSTROUTING -j SNAT --to-source ... --random



状況は面癜くなくなりたす。 送信ポヌトは、NAT倉換䞭にランダムに遞択されたす。



党䜓ずしお、䞊の図を泚意深く芋おみるず、次の問題がありたす。



host1もhost2もSRC1ランダムおよびSRC2ランダムを認識したせん。たずえば、送信パケットの送信元ポヌトを倉曎したり、NATデバむスのNAT倉換の゚ントリが叀くなっおリセットされる時間があるようにデヌタを送信する間に十分なタむムアりトを蚭定するなど、間接的にのみ圱響を䞎えるこずができたす。

Host2は、特に、必芁に応じおDST1を芋぀ける必芁がありたす䞀般に、ポヌトは事前に合意できたすが、最悪の堎合を考慮したす。



仲介者の必芁性に぀いお長い説明をするこずなく、亀換のすべおの参加者のためのアクションのおおよそのアルゎリズムをすぐに抂説したす。



1. host1ずhost2が無料の双方向トラフィックフロヌで本栌的な制埡接続を確立するための仲介者が厳密に必芁です。 このような制埡セッションのむニシ゚ヌタヌは、NATの背埌にあるホストです。 仲介者は、ホワむトIPに関する情報を゚ンドホストに配垃したす。



2. host1がタヌゲット接続/クラむアントのむニシ゚ヌタヌであり、host2の堎合、接続が着信する、぀たりサヌバヌずしお機胜するず仮定したす。



3. Host1は、DST1_willを任意に遞択しお、NAT2の実際のアドレスぞのパケットの送信を開始したす。



4.制埡接続のHost1は、遞択したDST1_preferenceの仲介者に通知し、同じパラメヌタヌ送信元ポヌト、宛先ポヌトでパケットを送信し続けお、SRC1ランダムが倉わらないようにNAT1ぞの䞀定のブロヌドキャストを維持したす。 出荷間の遅延は実隓的に決定するこずができたす。タスクは簡単なので、私はそれをペむントせず、このテキストに含めたせん。



5.ブロヌカヌはNAT1をスキャンし、゜ヌスIPをアドレスNAT2に眮き換えお、必芁に応じお゜ヌスポヌトDST1__を提䟛し、1024たたは65535の党範囲以䞊の範囲で宛先ポヌトを゜ヌトしたす。 NATは察称ず呌ばれる無駄ではないず以前に決定したため、これはすべお必芁です。

列挙の結果ずしお今回たでにNAT1によっお犁止されおいない堎合、最終的に宛先ポヌトSRC1_randomでパケットを送信するず、そのようなパケットは、NAT機胜の範囲を超える特にトリッキヌな保護メカニズムがhost1に枡される堎合。 圌が怜出し、制埡チャネルでさらに怜出したものは、仲介者に通知し、掚枬倀SRC1_randomを蚘憶したす。



6.䞭間は、制埡チャネルでhost2 SRC1_randomに報告したす。



7. Host2は倖郚アドレスNAT1ぞのパケットの送信を開始したす。これらのパケットの宛先ポヌトはDST2_of_desire = SRC1_randomである必芁がありたす。 NAT2デバむスによっお遞択されたSRC2_randomがDST1_of_willず䞀臎するたで、圌はこれをしなければなりたせん。

この埅望の偶然が起こるずき、2぀のオプションが可胜です。

最初の。 そのようなパケットはhost1に到達し、これに぀いお仲介者に通知し、仲介者はhost2に通知し、「ハッピヌ」セッションが継続したす。

二番目。 Host2は、「swotting」でもう䞀床NAT1を困らせたくないので、発信パケットのIP-ttlを、NAT2を通過する倀に倉曎したしたが、NAT1には到達したせんでした。 同時に、NAT2ぞの倉換が䜜成され、パケットはNAT1に到達したせんが、切望された倉換が䜜成されるず、パケットはhost1から送信されたす前述のように倉換をサポヌトするこず、぀たり、NAT2が定数パラメヌタヌで「スラム」するこずを忘れおいたせん host2に到達し、次に仲介者などに通知したす。



ご芧のずおり、䞀般的なケヌスでは、察称NATを砎るこずはそれほど単玔で高速なタスクではありたせん。 さたざたな実装iptablesを思い出しおくださいでは、倧幅に簡玠化され、保蚌された成功を䌎う手順に倉わりたすが、䞀般的な堎合ではなく繰り返したす。

説明されおいるアルゎリズムの最もボトルネックは䜕ですか



1.パラグラフ5のスプヌフィングの必芁性。仲介者は、これを蚱可し、プロバむダヌから問題を取埗しないネットワヌクにアクセスする方法を甚意する必芁がありたす。



2.手順5で広範囲のポヌトをスキャンしたす。「正しい」NATの堎合、ホスト1が仲介者ずの接続を単玔に確立し、NAT2ぞの接続の堎合のランダムSRC1_が同じであるず仮定するこずはできたせん。 宛先アドレスを倉曎するず、SRC1_randomが倉曎されたす。 スキャンは、もちろん、十分に迅速か぀積極的に実行できたす。より慎重に、しかしより長くするこずができたす。 いずれにせよ、これは匱点です。



3.パラグラフ7のアクションは無期限に長くなる可胜性がありたす。 この瞬間は私の奜奇心ず詊しおみたいずいう欲求を呌び起こしたした。



4.そしおもちろん、たくさんの手玙を読むのにうんざりしおいる人は、「必芁だず思っお、すべおの暙的トラフィ​​ックを仲介者に通しお、それだけだ」ず蚀うかもしれたせん。 ここで議論するこずは困難です、もちろん、私はこのテキストが取った時間のためにそれらに謝眪したす。



今すぐ緎習したす。 トピックに興味のある人を倱望させるかもしれたせんが、仲介者を曞きたせんでした:) tcpdumpは、適切な堎所で適切なタむミングで、たた著者の目ず手で圌の圹割で行動したした:)



だから。 3G = host1のWindowsワヌクステヌションがありたす。 モデム接続で、グレヌアドレス10.140.80.130が発行されたした。 これは、NATの背埌にあるhost1の内郚アドレスです。

このルヌタヌのすぐ埌ろに癜いアドレスxx.xx.xx.xxずhost2を持぀AT AR-750sルヌタヌがありたす。

必芁に応じお任意のDST1を遞択したす。私の堎合は21393でした。

host1から10秒の頻床で開始し、UDPパケットをxx.xx.xx.xxに送信したす21393。

悪意のあるスキャンの段階をスキップしお、ポヌト21393に関する「秘密の」情報ずhost2にSRC1がモバむルオペレヌタヌのNATオペレヌタヌにずっおランダムであるずいう「芗き芋」情報を持ち蟌み、45499私たちがNAT-it world-eaterであるIP too = yy.yy.yy.yy。

host2から、yy.yy.yy.yy45499で「bang」を開始し、ラッキヌになるたで埅機したす。発信パケットが21393に等しいNATの゜ヌスポヌトを受信したす。ttlを混乱させず、host1およびhost2でスニファヌによる故障を怜出したした。 host2からのパケット生成速床は1秒あたり5パケットでした。 同時に、NAT2ルヌタヌには、無関係なナヌザヌが聞いたこずがあるトラフィックがわずかに負荷がかかっおいたした。

最初の「故障」は、実隓開始の玄8時間埌に発生したした。 その埌、蟲堎党䜓が䞀晩働くために残っおいたため、さらにいく぀かが起こりたした。 埌続のものは数回より速く発生し始めたした。ここでは、「倖郚の」トラフィックの圱響に぀いお空想するこずができたす。



これが「故障」の様子です。 結論は遞択的であり、必芁な偶然の䞀臎を䌎う「ハッピヌ」パッケヌゞのみが含たれたす。



トラフィック収集の「トリッキヌ」ポむントでのスニファヌ出力。AR-750ルヌタヌの倖郚むンタヌフェむスでNATを実行した埌トラフィックに衚瀺されたす。



021905.060809 IP xx.xx.xx.xx.21393> yy.yy.yy.yy.45499UDP、長さ0

050700.178149 IP xx.xx.xx.xx.21393> yy.yy.yy.yy.45499UDP、長さ0

062835.355623 IP xx.xx.xx.xx.21393> yy.yy.yy.yy.45499UDP、長さ0

071629.764069 IP xx.xx.xx.xx.21393> yy.yy.yy.yy.45499UDP、長さ0

112806.899109 IP xx.xx.xx.xx.21393> yy.yy.yy.yy.45499UDP、長さ0



故障が「怜出」されたhost1のスニファヌ出力時間は同期されおいないため、タむムスタンプずhost2トラフィックのダンプからの出力の間に矛盟がありたす。



021820.480468 IP xx.xx.xx.xx.21393> 10.140.80.130.2429UDP、長さ0

050615.496093 IP xx.xx.xx.xx.21393> 10.140.80.130.2429UDP、長さ0

062750.464843 IP xx.xx.xx.xx.21393> 10.140.80.130.2429UDP、長さ0

071544.839843 IP xx.xx.xx.xx.21393> 10.140.80.130.2429UDP、長さ0

112721.589843 IP xx.xx.xx.xx.21393> 10.140.80.130.2429UDP、長さ0



host2に盎接ダンプした結果もあり、NAT1ぞの倉曎されおいない倉換をサポヌトするポむント4からのパケットがhost2に到達し始めたこずは明らかでしたが、私はそれをsoきたした。



これはそれほど正盎ではない実隓です。 しかし、パラグラフ7で比范的䜎い怜玢頻床でも、比范的劥圓な時間で目的の結果を達成できるこずを瀺したした。 より積極的なバスティングにより、さらに合理的になりたす。 もちろん、「工業甚」アプリケヌションは魅力的ではありたせんが、...しかしそれは可胜です。 説明されおいるアルゎリズムず実隓は、加速最適化マルチスレッドアプロヌチなどのテヌマに関する思考の糧ずなりたす。



UPDパケットが送信元ポヌトに倉曎を加えおhost2から送信されたこずを忘れおいたため、送信元ポヌトもNAT2に察しお倉曎され、NAT2ぞの倉換が終了するのを埅぀のはコストがかかりすぎたす。



All Articles