インターネット経由のSSH VPN(SSHトンネリング)

仕事用コンピューターとホームサーバーの間にトンネルを編成し、その後、すべての仕事用トラフィックをホームサーバーを介してインターネットに転送する必要がありました。



この問題を解決するには、Vitual Private Network(VPN)テクノロジーが最適です。 しかし、このテクノロジーを実装するものは何ですか?

-SSHを選択しました。

実際、バージョン4.3以降のOpenSSHはtunトンネリングをサポートしています。 これを利用して...







概略的には、次のようになります。







まず、サーバーにOpenSSHをインストールする必要があります。 私はUbuntu Serverを持っていますが、次のようにします:



sudo aptitude install openssh-server







ほとんどの場合、すでにインストールされています。 私では-それは正確に確立されています;)



より詳細な図を見て、それについて議論してください。







図からわかるように、動作中のコンピューターは、マスクが255.255.255.0でIP 172.16.0.1、デフォルトゲートウェイが172.16.0.254、IP 8.8.8.8がDNSとして指定されています



Work:

IP address: 172.16.0.1

Netmask: 255.255.255.0

Default Gateway: 172.16.0.254

DNS: 8.8.8.8







クライアントルーティングテーブル(作業):



   172.16.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
   169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
   0.0.0.0 172.16.0.254 0.0.0.0 UG 0 0 0 eth0 


169.254.0.0はzeroconfルートです。


トンネルを設定するには、OpenSSH構成ファイルでトンネリングを有効にする必要があります。 /etc/ssh/sshd_config



で、 PermitTunnel point-to-point



追加し、OpenSSH service ssh restart



サーバーをservice ssh restart



ます

ニュアンス:

実際には、トンネルを整理するには、ルートアカウントでサーバーにログインする必要がありますが、これは良くありません! したがって、問題には2つの解決策があります。

1. md5 hashのような複雑なパスワードをルートに配置します。

2.キーによる認証を設定します。

どの方法を選択するかはあなた次第です。 説明している例では、これは重要ではありません。

パスワード認証を使用する場合は、構成でPermitRootLogin yesを有効にして、rootとしてログインできるようにします。


サーバーへの接続とトンネルの作成は、コマンドsudo ssh root@74.125.87.104 -w 0:0



を使用して行われsudo ssh root@74.125.87.104 -w 0:0





必ずsudoまたはrootで実行してください。 Tunデバイスが作成されますが、これには特権が必要です。


-wスイッチは、サーバーとクライアントにtun0デバイスを作成し、それらを結合します。

ここに人からの説明があります。

-w local_tun[:remote_tun]

Requests tunnel device forwarding with the specified tun (4) devices between the client (local_tun) and the server (remote_tun)







tunデバイスを構成します。

ifconfig tun0 10.0.0.1/30 pointopoint 10.0.0.2



サーバーifconfig tun0 10.0.0.1/30 pointopoint 10.0.0.2





ifconfig tun0 10.0.0.2/30 pointopoint 10.0.0.1



クライアントifconfig tun0 10.0.0.2/30 pointopoint 10.0.0.1







(クライアントコンピューターから)pingを使用してテストできます。

    ユーザー@ホスト:〜$ ping 10.0.0.1 -c 2
     PING 10.0.0.1(10.0.0.1)56(84)バイトのデータ。
     10.0.0.1から64バイト:icmp_seq = 1 ttl = 64 time = 5.80 ms
     10.0.0.1から64バイト:icmp_seq = 2 ttl = 64 time = 8.61 ms

     --- 10.0.0.1 ping統計---
     2パケット送信、2受信、0%パケット損失、時間1001ms
     rtt min / avg / max / mdev = 5.800 / 7.209 / 8.618 / 1.409 ms


ここで、tun0を介してすべてのトラフィックを開始する必要があります。そのためには、tun0をデフォルトゲートウェイとして指定する必要がありますが、同時にサーバー(ホームサーバー)およびDNSサーバーとの接続が失われます。 したがって、現在のデフォルトゲートウェイ(172.16.0.254)を削除する前に、ルーティングテーブルでサーバーとDNSサーバーにルートを追加する必要があります。 次のようにできること:



route add -host 74.125.87.104 gw 172.16.0.254

route add -host 8.8.8.8 gw 172.16.0.254







その後、現在のデフォルトゲートウェイ(172.16.0.254)を削除し、サーバーtun0インターフェイス(10.0.0.1)で割り当てたIPアドレスをゲートウェイとして指定します



route del default

route add default gw 10.0.0.1







上記の手順を完了すると、クライアントルーティングテーブル(Work)は次の形式になります。

     74.125.87.104 172.16.0.254 255.255.255.255 UGH 0 0 0 eth0
     8.8.8.8 172.16.0.254 255.255.255.255 UGH 0 0 0 eth0
     10.0.0.0 0.0.0.0 255.255.255.252 U 0 0 0 tun0
     172.16.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
     169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
     0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 tun0


現在、不明なサブネットにルーティングされるすべてのトラフィック、およびアドレス8.8.8.8と74.125.87.104を除くすべての不明なトラフィックは、10.0.0.1を介して、つまり暗号化された SSHトンネルを介してルーティングされます。 しかし、サーバーはトラフィックに対して何もしません。 クライアントにNATを構成する必要があるため。 これを行うには、iptablesにルールを追加します



iptables -t nat -A POSTROUTING -s 10.0.0.2 -j MASQUERADE







カーネルでIP転送を有効にする



sysctl -w net.ipv4.ip_forward=1







システムの起動時に電源をオンにすることを忘れないでください...



mcedit /etc/sysctl.conf







PS> mceditはテキストエディターです。 他のものを使用できます。


コメントアウトされた行net.ipv4.ip_forward=1



を見つけて、コメントを外します。



これで、 ミッションは完了しました 。現在、すべてのトラフィックはsshトンネルを介してルーティングされ、インターネット上でNATされています。 トンネルは暗号化され、サーバーへのトラフィックは保護されます!



All Articles