netfilterを使ってUDPをTCPに変換するには?

netfilterを使ってUDPをTCPに変換するには?

私はすべてのUDPトラフィック(自分のDNSサーバーへのDNSを除く)をブロックする優れたISPを持っています。

しかし、VPNソリューションにUDPを使用したいです。両方のVPNエンドポイントにrootアクセス権があり、両方ともLinuxを使用します。

私の考えは、発信UDPパケットのパケットタイプフィールドをオーバーライドしてTCPのように見せ、サーバー側でその逆を実行することです。

したがって、私のクールなISPのルーター/ファイアウォールには間違ったTCPパケットが表示されますが、私のVPNプロセスはUDPを介して通信できます。

私はISPのファイアウォールがいくつかの問題を検出するのに十分スマートではないと強く疑っています。

もちろん、これは汚いトリックですが、2番目に最も一般的なIPプロトコルを単に禁止し、それを通常のインターネット接続として販売するよりも汚いものではありません。

私が知っている限り、これを行うことができるいくつかのiptablesルールがありますが、どのルールですか?

答え1

おそらく動作しません。ファイアウォールは正しいTCP接続に必要なTCP設定パケット(SYN、SYN-ACK、ACK)を確実に追跡し、修正されたUDPパケットのみを使用すると、これらのパケットは失われます。

あなたができることは、片側からUDPを取得し、TCPを介して他方に接続し、他のアプリケーションは着信TCP接続を受け入れ、TCPトラフィックをUDPに転送する小さなアプリケーションを作成することです。

答え2

TCPとUDPは基本的に異なるプロトコルなので、これだけでは不十分ですiptables

この場合(ISPブロック)、IPsec VPN設定を忘れてしまうこともあります。みんなUDPポート)。

すべてのトラフィックは ICMP 経由でトンネリングされます。 (私が知っている最も古い解決策です。多くの組織では、いかなる種類のICMPもフィルタリングしていません。)https://github.com/DhavalKapil/icmptunnel

「icmptunnel」は、IPトラフィックをICMPエコーパケットにカプセル化し、それを独自のプロキシサーバーに送信するように機能します。プロキシサーバーはパケットのカプセル化を解除し、IPトラフィックを転送します。クライアントに向けられた受信 IP パケットは、再び ICMP 応答パケットにカプセル化され、クライアントに再送信されます。 IPトラフィックはICMPパケットの「データ」フィールドに送信されます。

RFC 792は、任意のデータ長を持つすべてのタイプ0(エコー応答)または8(エコーメッセージ)ICMPパケットを許可するICMPパケットを管理するIETFルールです。

したがって、デフォルトでは、クライアントシステムはICMPプロトコルを使用してプロキシサーバーとのみ通信します。クライアントコンピュータで実行されているアプリケーションは、これを認識せず、スムーズに実行されます。

また、ABが指摘したように、UDP-rawトンネリングソフトウェアは次の場所にあります。https://github.com/wangyu-/udp2raw-tunnel

またはOpenVPNソリューションを設定してください。外部と通信できる場合は、ポート53 / UDPを介してOpenVPNを実行し、そのポートがない場合はTCPを介して実行します。 TCPを介したVPN設定はUDPよりも遅いですが、機能します。

IPフィールドの変更の実際の問題はiptablesのmangleテーブルを見たいのですが、

  1. あなたのISPもこれをブロックしたようです。
  2. mangleがいくつかのIPフィールドの修正をサポートしていることを知っていますが、どのIPフィールドが必要かわかりません。バラよりhttps://serverfault.com/questions/467756/what-is-the-mangle-table-in-iptables

より多くの選択肢については、GREトンネリング(プロトコル47)を試してみてください。https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.tunnel.gre.html(アプリケーションを開発するよりも簡単です。)一部の組織はこれを防ぎます。デフォルトでは、プロトコル47を介してIP / ICMP / UDPをカプセル化します。

または、他のすべての方法が失敗した場合は、SSH経由でIP経由でトンネリングすることができます(TCPポートではなくSSH経由でトンネリングすることに注意してください)。 Tun を使用した SSH による IP トンネルの設定をご覧ください。http://www.marcfargas.com/posts/ip-tunnel-over-ssh-with-tun/しかし、このスレッドのすべての方法やSSHを介してTUNを検出してブロックするためのスマート/適応/ディープスキャントラフィックシェーパー/ファイアウォール技術はありません。

PS。 ISP が UDP だけでなく NTP と DNS UDP ポートもブロックしているとは信じ難いです。

関連情報