したがって、sshを使用してssh User@PrivateIP
と入力してサーバーに接続します。そのコードをVPNのように機能するコードに変換するにはどうすればよいでしょうか(たとえば、別の位置情報からgoogleを検索します)。参考:接続するとは、付属のVPNサーバーではなく、自分のコンピューターに接続することを意味します。
それは正確にはVPNではありませんが、ほとんどの場合十分です。動的ポート転送を使用してssh接続を作成し、socksプロキシを作成できます。
ssh -D 9050 user@sshserver -fTNC
-D [bind_address:]port
ローカルの「動的な」アプリケーションレベルのポート転送を指定します...このポートへの接続が確立されるたびに、接続は安全なチャネルを介して転送され、アプリケーションプロトコルを使用して接続先が決定されますリモートマシンから。現在、SOCKS4およびSOCKS5プロトコルがサポートされています...詳しくは man ssh
をご覧ください。
オプション-fTNC
は圧縮を有効にし、接続をバックグラウンドでプッシュします。
必要に応じて、autossh
の代わりに ssh
を使用します。
さらに、次のようにcrontab
エントリを作成できます。
@reboot autossh -D 9050 user@sshserver -fTNC
あとは、アプリケーションにse localhost:9050
as socks proxyと指示する必要があります。このタスクに特化したリファレンスをいくつか紹介します。
その他の特別な要件については、おそらくiptables
ルールを適用できます。
VPNにより近いもう1つのソリューションは sshuttle
で、sshでも機能します。その概要は次のとおりです。
sshuttle
:トランスペアレントプロキシとVPNが出会い、sshと出会うところ私の知る限り、sshuttleは次の一般的なケースを解決する唯一のプログラムです。
- クライアントマシン(またはルーター)はLinux、FreeBSD、またはMacOSです。
- Ssh経由でリモートネットワークにアクセスできます。
- リモートネットワークでの管理者アクセス権は必要ありません。
- リモートネットワークにはVPNがないか、愚かな/複雑なVPNプロトコル(IPsec、PPTPなど)しかありません。あるいは、あなたが管理者で、VPNツールのひどい状態に苛立っているだけかもしれません。
- リモートネットワーク上のすべてのホスト/ポートごとにsshポートフォワードを作成する必要はありません。
- Opensshのポート転送はランダムに遅いか、または愚かであるため、嫌いです。
- Opensshサーバーではデフォルトで無効になっているため、opensshのPermitTunnel機能は使用できません。さらに、パフォーマンスがひどいTCP-over-TCPを実行します(以下を参照)。
これはUbuntuリポジトリで利用できるので、インストールして次のコマンドで調査を開始できます。
Sudo apt install sshuttle
非rootユーザーとしてvirtualenvにインストールすることもできます。インストールしたら se :
sshuttle --dns -r user@sshserver 0.0.0.0/0
このコマンドは、DNSクエリを含むすべてのトラフィックを転送し、接続先のサーバーのDNSサーバーを経由してプロキシされます。