ここでの基本的な考え方は、ネットワーク上のリモートコンピューターに接続し、すべてのネットワークトラフィックをそのネットワークに対してローカルのように見せることです。
誰かがそれを必要とするかもしれない最初の理由は、セキュリティを改善し、潜在的な脅威を早期に排除することです。たとえば、このプリンタを通常のインターネットに「公開」せずに、ネットワークプリンタに印刷する必要がある場合があります。その結果、たとえば、誰かがカフェに座って、VPN経由でネットワークに接続した後、自分のデスクにいるかのように感じて、プリンターでドキュメントを印刷でき、プリンターは彼から数メートルのところに立っています。 VPNを使用すると、カフェのWiFiネットワークを介して送信されるデータが暗号化されることも意味します。
2つ目の理由は、ユーザーの実際の場所を詮索好きな目から隠すためです。誰かがBBCビデオを見るのが好きであるが、エクアドルに住んでいるとしましょう。つまり、彼の動画がブロックされないようにするには、VPN経由で英国にあるネットワークに接続する必要があります。特定の国の当局がインターネットを監視および検閲する場合、この国の居住者もトラフィックを偽装する機会から利益を得ることができます。
SSHを使用してVPN接続を確立することは、上記の両方のタスクで問題ありません。ただし、主に最初のものに関心がある場合は、問題の解決を目的として、専用ルーターまたはRaspberryPiなどの小型コンピューターを使用することをお勧めします。どこかでサーバーを借りるなら、「VPNoverSSH」はあなたには向いていないと言わざるを得ません。
準備

VPN
両方のマシンへのルートアクセスのみが必要です。 SSHサーバーをリモートコンピューターにインストールする必要があります。もちろん、SSHクライアントも必要になります。ローカルマシンとリモートマシンの両方で、いくつかの設定を行う必要があります。私はKDEを使用しているので、NetworkManagerを使用して必要な設定を行いますが、他の方法でもかまいません。 NetworkManagerを使用すると、作業が簡単になります。
サーバー上でいくつかの特別な設定を行う必要がありますが、それらがすでにサーバー上で行われている可能性は十分にあります。したがって、ファイルに
/etc/ssh/sshd_config
は1行が含まれている必要があります
PermitTunnel=yes
。さらに、値を
yes
パラメーターに設定する必要がある場合があります
AllowTCPForwarding
。ファイアウォールにもいくつかの設定が必要な場合があります。ただし、 NetworkManagerプラグインを構成するための手順 このプログラムを使用しない人にも役立つかもしれません。
クライアント側の設定
NetworkManagerを使用している場合は、適切なプラグインが必要になります。Neonおよびその他のDebianベースのディストリビューションの場合、パッケージは問題ありません
network-manager-ssh
。必要なのはこれだけです。NetworkManagerを使用したくない場合は、プラグイン作成者の資料から次のコマンドを使用できます。
ssh -f -v -o Tunnel=point-to-point -o ServerAliveInterval=10 -o TCPKeepAlive=yes -w 100:100 root@YOUR_SSH_SERVER \ '/sbin/ifconfig tun100 172.16.40.1 netmask 255.255.255.252 pointopoint 172.16.40.2' && \ /sbin/ifconfig tun100 172.16.40.2 netmask 255.255.255.252 pointopoint 172.16.40.1
トンネルを作成しているため、これには両方のシステムへのルートアクセスが必要です。これは、プラグインを使用している場合でも、いくつかの問題を引き起こします。もちろん、SSH接続用のパスワードの入力とキーの確認を常に求められることは望ましくありません。ただし、VPNを手動で構成すると、これらの問題を修正できます。
問題
最近のほとんどのシステムでは、パスワードを使用してrootとしてログインすることはできません。また、このモードでシステムに接続することさえできない場合もあります。したがって、まず、この問題を解決する必要があります。さらに、NetworkManagerがSSHを開始すると、通常のユーザーではなく、rootユーザーのキーが検索されます。彼が何かを見つけることができない場合、彼はただ立ち止まります。したがって、シームレスなルートログインを提供する必要があります。
サーバーにルートログインする機能を提供するには、ファイルを編集し
/etc/ssh/sshd_config
てパラメーター
PermitRootLogin
を次のように設定する必要があります。
yes
..。サーバー構成の次のステップを完了するのに必要な時間だけ、このモードで作業することをお勧めします。次に、たとえば次のコマンドを使用して、sshdサーバーを再起動する必要があります。
systemctl restart sshd
次のコマンドを使用することもできます。
/etc/init.d/ssh restart
次に、通常のアカウントを使用してローカルマシンにログインし、を使用
ssh-copy-id
してホストマシンに証明書をインストールする必要があります。これが完了したら、サーバーに戻って
/etc/ssh/sshd_config
値
PermitRootLogin
をに変更する必要があります
prohibit-password
。これにより、証明書を使用してrootとしてサーバーにログインできますが、パスワードは使用できません。
すでにrootでログインしている場合は、サーバーキーを受け入れるかどうかをすでに尋ねられている可能性があります。そうでない場合は、問題があります。可能であれば、ログインして対応する質問に「はい」と答えてください。その後、システムは質問を停止します。ただし、これができない場合は、を無効にすることで問題を解決できます
StrictHostKeyChecking
。
理論的には、追加のsshオプションをNetworkManagerプラグインに渡すことができますが、何らかの理由で、このアプローチはリポジトリのプラグインのバージョンでは機能しません。プラグインを使用せず、すべてを手動で行う場合は、必要な設定を自分で行うことができます。 rootユーザーのSSH設定はで設定できます
/root/.ssh/config
。でグローバル設定を設定することもできます
/etc/ssh/ssh_config
。
グローバル設定を変更し、システムがそれをサポートしている場合は、の使用を検討してください
/etc/ssh/ssh_config.d
。これにより、特定のホストのパラメータを設定できるようになり、システムの更新時に上書きされることはありません。たとえば、適切なディレクトリに次の名前のファイルを作成できます
hackaday.conf
。
Host *.hackaday.com hackaday.com StrictHostKeyChecking no Tunnel yes
繰り返しますが、ホストキーを確認するというアイデアが気に入らない場合は、rootとして一度ログインし、リモートキーを手動で受け入れてください。または、勇気がある場合は、手動で編集します
/root/.ssh/known_hosts
。
接続
これですべての準備が整うはずです。NetworkManagerのプラグインを使用している場合は、新しい接続を確立する必要があります。つまり、[VPN接続]セクションに移動して[SSH]を選択する必要があります。

接続タイプの選択
次に、新しい接続のいくつかのパラメーターを構成する必要があります。含む-リモートシステムへのログインに使用する予定の証明書を指定する必要があります。

接続のセットアップ
接続設定を保存した後、他のネットワークインターフェイスと同じように、この接続をアクティブ化できます。新しいVPNをテストする場合は、まず、通常、専用のWebサイトでIPアドレスを尋ねます。次に、VPNをオンにして、アドレスをもう一度確認します。VPN接続の確立に失敗した場合は、システムログでSSHエラーに関する情報を確認してください。
結果
もちろん、他のVPNソリューションもあります。ただし、使用しているリモートコンピューターにSSHサーバーがあることはほぼ保証されています。したがって、SSHを介してVPN接続を確立するために提案された方法は、事前の準備なしで使用できるシンプルで便利なソリューションです。
ちなみに、SSHを使えば面白いことがたくさんできます。たとえば、ファイルを使用して便利な作業を整理します。
VPNを使用していますか?
