このセクションでは、OpenSSHの機能を使用して、Debian GNU / Linux OSに適用されるレイヤー3トンネルを作成する方法を説明します(Ubuntuで特別な問題なく動作します)。
これが、構築する回路の外観です。
---------- / \ _ /-\ / \ /-\ -----------------
| クライアント| ~~~~~~~ /インターネット/ ~~~~~~~ | サーバー|
---------- \ _ /-\ / \ _ / \ / / -----------------
|| \ \ || \
|| {tun0} {vlan8} || {tun1}
|| ||
\-==================トンネル===============-/
* vlan8-212.90.160.1/27
* tun0-10.254.254.2/30
* tun1-10.254.254.1/30
クライアント側の準備作業。
スキームでは、キーによる認証を使用します。このため、最初にキー自体(rsaキータイプ、4Kビットサイズ)を生成し、それをサーバーのルートアカウントにコピーします(同時に、サーバーで、しばらくの間ルートとしてログインする機能を開く必要があります) -PermitRootLogin yes):
#sudo ssh-keygen -t rsa -b 4096
#ssh-copy-id -i .ssh / id_rsa.pub root@212.90.160.1
この時点で、すでに.ssh / known_hostsに保存済みのsshキーがあり、次のようなものに「yes」と答えます。
ホスト '212.90.160.1(212.90.160.1)'の信頼性は確立できません。
RSAキーフィンガープリントは、aa:fe:a0:38:7d:11:78:60:01:b0:80:78:90:ab:6a:d2です。
接続を続行してもよろしいですか(はい/いいえ)? はい
警告:既知のホストのリストに「212.90.160.1」(RSA)を永続的に追加しました。
また、サーバー側の.ssh / authorized_keysに既にコピーされたクライアント認証キー。
次に、クライアント側の/ etc / network / interfacesでインターフェイス自体を指定します。
自動tun0
iface tun0 inet static
pre-up ssh -S / var / run / ssh-myvpn-tunnel-control -M -f -w 0:1 212.90.160.1 true
就寝前5
ポストアップIP LS tun0 mtu 1300
アドレス10.254.254.2
ネットマスク255.255.255.252
ポイントポイント10.254.254.1
ポストダウンssh -S / var / run / ssh-myvpn-tunnel-control -O exit 212.90.160.1
この段階で、クライアントとの作業を停止し、サーバーに進みます。
サーバー側の準備作業。
サーバー側で最初に行うことは、/ etc / ssh / sshd_configに次の変更を加えることです。
PermitTunnelポイントツーポイント
PermitRootLogin強制コマンドのみ
ここで/root/.ssh/authorized_keysを編集し、トンネルを整理するコマンドを追加します。
tunnel = "1"、command = "/ sbin / ifdown tun1; / sbin / ifup tun1" ssh-rsa AAAA ...... X9vc = root @ ipclub
その後、/ etc / network / interfacesを編集します。
auto vlan8
iface vlan8 inet static
アドレス212.90.160.1
ネットマスク255.255.255.224
ネットワーク212.90.160.0
放送212.90.160.31
ゲートウェイ212.90.160.30
vlan_raw_device eth0
mtu 1400
iface tun1 inet static
アドレス10.254.254.1
ネットマスク255.255.255.252
ポイントポイント10.254.254.2
ポストアップIP LS tun0 mtu 1300
/etc/sysctl.confのnet.ipv4.conf.default.forwardingのステータスを確認することを忘れないでください:
コード
net.ipv4.conf.default.forwarding = 1
さて、またはトンネルを使用する前に:
$ sudo sysctl net.ipv4.conf.default.forwarding = 1
重要! net.ipv4.conf.default.forwardingを1に設定しないと、トンネルは上昇しません!
実際、この段階で準備作業はすべて完了しています。 クライアント側からトンネルを上げようとします:
$ sudo ifup tun0
$ ip al dev tun0
9:tun0:mtu 1300 qdisc pfifo_fast qlen 500
リンク/ [65534]
inet 10.254.254.2ピア10.254.254.1/30スコープグローバルtun0
$ ping -c2 10.254.254.1
PING 10.254.254.1(10.254.254.1):56データバイト
10.254.254.1から64バイト:icmp_seq = 0 ttl = 64 time = 15.116 ms
10.254.254.1から64バイト:icmp_seq = 1 ttl = 64 time = 16.454 ms
--- 10.254.254.1 ping統計---
2パケット送信、2パケット受信、0%パケット損失
往復最小/平均/最大/ stddev = 15.116 / 15.785 / 16.454 / 0.669 ms
そして、サーバー側でicmpトラフィックを観察します:
$ sudo tshark -tad -pni tun1
ユーザー「root」およびグループ「root」として実行しています。 これは危険です。
tun1でのキャプチャ
2009-03-10 11:25:53.927598 10.254.254.2-> 10.254.254.1 ICMPエコー(ping)要求
2009-03-10 11:25:53.927649 10.254.254.1-> 10.254.254.2 ICMPエコー(ping)応答
2009-03-10 11:25:54.567857 10.254.254.2-> 10.254.254.1 ICMPエコー(ping)要求
2009-03-10 11:25:54.567910 10.254.254.1-> 10.254.254.2 ICMPエコー(ping)応答
さらに、通常のeth、vlan、greなどと同様にこれらのインターフェイスを使用できます。 トラフィックをルーティングし、フィルタリングルールを設定します。 など 思考の飛行は空想によってのみ制限されます;)ただし、トンネルがまだ第3レベルに構築されていることを忘れないため、QoSパケットをマーキングしても期待する結果が得られない可能性があります。
実際、これは終了する可能性がありますが、複数のSSHレイヤー3トンネルを作成したい人のために、「滑りやすい」瞬間に注意を払いたいと思います。
クライアント:pre-up ssh -S / var / run / ssh-myvpn-tunnel-control -M -f -w 0:1 212.90.160.1 true
サーバー:tunnel = "1"、command = "/ sbin / ifdown tun1; / sbin / ifup tun1" ssh-rsa AAAA ...... X9vc = root @ ipclub
0はクライアント側のトンネル番号です
1はサーバー側のトンネル番号です
ここで、私はほとんど忘れていました。
もう1つの不快な瞬間があります。 接続が定期的に「落ちる」ことがあります。 したがって、cronのどこかでクライアント側でこのシナリオのようなものを実行するように注意するのは良いことです。
$ cat /etc/cron.d/tun0
PATH = / usr / local / sbin:/ usr / local / bin:/ sbin:/ bin:/ usr / sbin:/ usr / bin
* / 5 * * * * root fping -c4 10.254.254.1 || (/ sbin / ifdown tun0; sleep 5; / sbin / ifup tun0)
$ sudo /etc/init.d/cron restart