web-dev-qa-db-ja.com

netfilterを使用してUDPをTCPに変換するにはどうすればよいですか?

私はすべてのUDPトラフィックをブロックする素晴らしいISPを持っています(独自のDNSサーバーへのDNSを除く)。

ただし、VPNソリューションにUDPを使用したいと思います。私は両方のVPNエンドポイントにルートを持っており、両方ともLinuxを使用しています。

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

したがって、私のすばらしいISPのルーター/ファイアウォールは悪いTCPパケットを認識しますが、私のVPNプロセスはUDPで通信できます。

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

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

私の知る限り、そのためのiptablesルールがいくつかありますが、どれですか?

TCPとUDPは根本的に異なるプロトコルであるため、iptablesだけで十分かどうかは疑問です。

このようなシナリオでのIPsecVPNの設定を忘れることができます(ISPブロッキングallUDPポート)。

ICMPを介してすべてのトラフィックをトンネリングします。 (私が知っている最も古い学校のソリューション。多くの組織はまだどの種類のICMPも除外していません) https://github.com/DhavalKapil/icmptunnel を参照してください。

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

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

したがって、基本的に、クライアントマシンはICMPプロトコルのみを使用してプロキシサーバーと通信します。クライアントマシンで実行されているアプリケーションは、この事実に気づかず、シームレスに動作します。

また、A.B。指摘するように、あなたはUDPからrawへのトンネリングソフトウェアを持っています https://github.com/wangyu-/udp2raw-tunnel

または、OpenVPNソリューションをセットアップします。ポート53/UDPを介してOpenVPNを実行して外部と通信する場合、またはそれがない場合は、TCPを介して実行します。 TCP)を介してVPNを実行すると、UDPよりも遅くなりますが、機能することに注意してください。

IPフィールドを変更する実際の質問について:iptablesでマングルテーブルを見たいと思いますが、1)ISPもそれをブロックしていると思われます2)マングルがいくつかの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およびDNSUDPポートをブロックしているとは信じがたいです。

3
Rui F Ribeiro

これはおそらく機能しません。ファイアウォールは、正しいTCP接続に必要なTCPセットアップパケット(SYN、SYN-ACK、ACK))を確実に追跡します。これは、使用するだけでは失われます。変更されたUDPパケット。

できることは次のとおりです。一方の側でUDPを取得し、TCPを介してもう一方の側に接続する小さなアプリケーションと、着信を受け入れる別のアプリケーションを作成しますTCP接続と転送TCP UDPへのトラフィック。

2
gerhard d.