この問題を解決するには、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されています。 トンネルは暗号化され、サーバーへのトラフィックは保護されます!