私は現在中国を訪問しているので、VPNを設定するためのいくつかのオプションがあります。しかし、私のVPNサーバーは、しばらく使用した後、突然ネットワークから消えてしまう傾向があります。
VPNトラフィックが検出されないように、SSHトンネルを使用して別のサーバーに接続し、それを介してVPNを接続することもできるのではないかと思いました。そうすれば、おそらく、トラフィックはプロバイダーへのSSH接続として読み取られます。
だから、私はこのようなサーバーに接続します:
ssh peter@some-server -L 4444:vpn-server:1194 -N
そして、これを私のopenvpnクライアント構成に追加します。
remote localhost 1194
悲しいことに、これは機能しません。接続は認証されますが、その後、VPNの内部にも接続できません(ping 10.8.0.1
)または外側(ping 8.8.8.8
)。これはうまくいくべきですか、それとも私は何かを誤解していますか?
追加する必要のあるiptablesNATルールはありますか?これまでに追加した唯一のNATルールは次のとおりです。
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
VPNを使用したSSHトンネルは、許容できるほど遅いものの、中国で機能します。暗号化設定を下げても速度は上がりません。中国から世界のどこへでも接続速度は一般的に抑制されていると思います。
ポートフォワーディングが有効になっているSSHトンネルです。次に、そのSSHトンネルを介してSOCKSプロキシでOpenVPNを使用します。デフォルト以外のポート番号も機能します。
ファイアウォールやルート構成は必要ありません。私にとっては完全にうまく機能します。 :)
SSHトンネルを介してVPN接続を設定するための単純なアプローチは機能しません。最初の問題:VPNサーバー自体への接続のみをトンネリングしているため、他のすべてのトラフィックをVPNサーバー経由でルーティングすることはできません[〜#〜] over [〜#〜]ssh
接続(したがって、接続が難読化されます)。これに対する修正は、動的SOCKS [5]プロキシを使用し、OpenVPNにそのプロキシ経由で接続するように指示することです。 OpenVPN構成ファイルに追加します。
socks-proxy localhost 6886
socks-proxy-retry
次に、動的SOCKSプロキシを使用してssh
セッションを開始します。
ssh -D 6886 -N REMOTE
次に、OpenVPN接続を開始できます。ただし、少なくともVPNを介してリダイレクトするすべてのトラフィック(OpenVPNディレクティブredirect-gateway def1
)を想定している場合、これにはもう1つの失敗があります。これを機能させるには、OpenVPNクライアントによって追加されたルートによってマスクされないSOCKSプロキシエンドポイントへのルートを維持する必要があります。これを行うには、OpenVPN構成に次のような別のディレクティブを追加します。
route REMOTE-IP 255.255.255.255 net_gateway default
mightそのディレクティブでホスト名REMOTEを使用できますが、手動でIPアドレスに解決する必要がある場合があります。
これは、少なくともipv4トラフィックでは機能するはずです。簡単なグーグル検索が表示されます このブログ投稿 これは本質的に同じことを行い、何が起こっているのかについての良い説明がありますが、ソリューションではより複雑に見えます(接続スクリプトを使用)
または、obfs4proxy
の使用を検討することもできます(例: this および this または buntu用にパッケージ化 )
TCPおよび外部VPSを介して(PiVPNを使用して)Raspberry Piへの接続を正常に確立できました。次に、これを実行しました。
サーバー(VPS/VPN)でパブリックへの転送を許可します。 GatewayPorts
をyes
に変更するか、まだ存在しない場合は追加します。
/etc/ssh/sshd_config:
GatewayPorts yes
proto udp
をtcp
に変更します(sshはtcpプロトコルを使用するため)
/etc/openvpn/server.conf:
proto tcp
ここでも、proto udp
をtcp-client
に変更します。
openvpn-client.ovpn:
proto tcp-client
次に、ssh転送を開始します(すべてのIPv4接続を許可するには0.0.0.0、サーバーでbashを開始しない場合は-N)
ssh -R 0.0.0.0:1194:localhost:1194 user@server -N
また、VPS/VPNサーバーが接続を許可し、適切なファイアウォール設定が設定されていることを確認する必要があります。 iptablesにufwを使用する場合は、次のようにします。
ufw allow 1194/tcp
ufw enable
これは最速ではないかもしれませんが、私にとってはうまくいきます。