![制限的なファイアウォールを介して OpenVPN を使用するにはどうすればよいでしょうか?](https://rvso.com/image/1330942/%E5%88%B6%E9%99%90%E7%9A%84%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%82%A2%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E3%82%92%E4%BB%8B%E3%81%97%E3%81%A6%20OpenVPN%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
私は現在、主に過度に制限されたファイアウォールを介して接続するために、個人用 VPS に OpenVPN を設定しようとしています。以下に示す設定はすべて、適度にファイアウォールが設定された接続を介して使用すると機能します。
私が試してみました:
- 標準ポートで動作するOpenVPN
- ポート 443 で実行されている OpenVPN (VPS のコマンド ラインから手動で OpenVPN を起動すると、サーバーが接続がほぼ即座に閉じられたことを報告します。これはファイアウォールの DPI の結果であると考えられます)
- ポート 443 で実行されている STunnel は OpenVPN にアクセスし、DPI を回避します。これは最も成功率が高く、接続が強制的に閉じられる前に、約 10 ~ 20 秒間、VPN 経由で接続とインターネット アクセスを許可します。
他に試せることはありますか?
答え1
一定時間後に接続が切断される場合は、1 秒あたりのバイト数による制限が考えられます。VPN 接続を遅くすると効果があるかどうかを確認してください。また、OpenVPN を UDP 用に構成している場合は、TCP を試してください (443 UDP はブロックされる可能性がありますが、443 TCP は検出されない可能性があります)。
SSL を使用する有名なサイトにアクセスして、証明書を確認します。次に、自宅でも同じ操作を行います。一致しない場合は、あなたの所在地では透過的な HTTPS SSL プロキシが使用されており、実際に HTTPS トラフィックを見ることができます。
ポート 443 以外のポートはそれほど厳重に監視されていない可能性があります。22 を試してください。
馬鹿げているように聞こえるかもしれませんが、ポート 80 経由で実行してみて、何が起こるかを確認してください。また、トラフィックが HTTP リクエストのように見えるように、ユーザーと VPS の間に HTTP トンネルを設定することもできます。
気が狂ったように感じたら、ヨウ素。
答え2
stunnel メソッドがそのように動作する理由はわかっていると思います。これは、stunnel サーバーに「静的ルート」を設定する必要があるためです。説明しましょう。openvpn サーバーに接続すると、ルーティング テーブルが変更され、openvpn パケットを除くすべてのパケットが VPN 経由でルーティングされます。実際には、openvpn はサーバーの IP アドレスのルートを追加します。ただし、stunnel を使用して openvpn サーバーに接続すると、openvpn がループバック インターフェイスに接続され、VPN の外部にサーバーへのルートがないため、stunnel パケットはサーバーに送られ、VPN に送られ、VPN パケットは stunnel に送られます :)
したがって、VPN (ホーム ルーター) の外部に出るサーバー IP へのルートを追加する必要があります。
また、メソッド ポート 443 の問題については、ファイアウォールが SPI または DPI を使用していて、https (ssl) パケットとは異なる openvpn パケットを簡単に作成できる可能性があると思います。したがって、最善の方法は stunnel を使用することです。または、ファイアウォールが ssl パケットをブロックする場合は、obfsproxy または fteproxy を使用してバイパスすることをお勧めします。
(この投稿は古いことは承知していますが、何週間も同じ問題に対する答えを探していたので、この件について私が学んだことを共有したいと思いました)
答え3
Reza Askari の返信は、まさに 3 番目の質問に対する答えでした。これは、私の Linux コンピューターと Android の両方で発生しています。
コンピュータ上でOpenVPNに接続する前に
sudo openvpn --config configFile.ovpn
OpenVPN トンネルから stunnel サーバーを削除するルールを追加する必要があります。
sudo /sbin/ip route add stunnel_ip via default_gateway_ip
次に、OpenVPN サーバーに接続します。完了したら、次の方法でそのルールを削除できます。
sudo /sbin/ip route del stunnel_ip
忘れないように簡単にするために、ルールを追加して OpenVPN を実行するシェル スクリプトを作成します。OpenVPN が終了すると、ルールは削除されます。
sudo /sbin/ip route add stunnel_ip via default_gateway_ip
sudo openvpn --config configFile.ovpn
sudo /sbin/ip route del stunnel_ip
Android では、「Arne Schwabe」による「OpenVPN for Android」クライアントと、「Balint Kovacs」による「SSLDroid」クライアントを使用します。
次に、OpenVPN クライアントで、stunnel を通過する VPN プロファイルから「SSLDroid」を除外します。
私は Reza の回答やコメントに賛成票を投じたかったのですが、この評判スコアのルールによりそれができませんでした。
答え4
LawrenceC の回答に加えて、そのネットワークから発生するスローロリスやその他の「低速で低速な」DDoS 攻撃に対する発信 DDoS 保護により、一定時間が経過するとセッションが強制的に閉じられることを付け加えておきたいと思います。
前述のように、トラフィック量の制限が原因の可能性もありますが、このような制限が存在する理由は他にもあります。デバイスごとの帯域幅を制限することは、今日 (2021 年) のテクノロジーでは簡単なことであり、それを強制するためにセッション タイムアウトを使用することはなくなりましたが、送信 DDoS 保護では、動作が本質的に散発的なプロトコルを使用する一定のデータ ストリームを送信するセッションもキックされる可能性があります。特に、トラフィックに、正当な HTTPS セッションの動作と一致しないほど均一または断片化されているパケットが含まれている場合はそうです (これは、多くのフラッド型 DDoS 攻撃の典型です)。
ステートフル ファイアウォールは近年大きく進歩しており、まさにこの動作を防ぐことが、先ほど挙げた DDoS 保護だけでなく、データ流出の防止という観点からも課題となっています。
今日、適切に構築されたファイアウォールに対してこの目標を達成するには、どのような構成を使用するかについてのアドバイス以上のものが必要になります。