VPN over SSH

From ArchWiki
Jump to navigation Jump to search

関連記事

SSH 経由で Virtual Private Network をセットアップする方法は複数あります。ときとして役に立つことはありますが、通常の VPN を完全に置き換えることはできないので注意してください。詳しくは [1] を参照。

OpenSSH 内蔵のトンネリング

OpenSSH には TUN/TAP サポートが組み込まれており -w<local-tun-number>:<remote-tun-number> で使用します。ここではレイヤー3 (point-to-point) TUN トンネルを作る方法を説明します。レイヤー2 (ethernet) TAP トンネルを作成することも可能です。

systemd-networkd を使って tun インターフェイスを作成

以下のファイルを作成してください:

/etc/systemd/network/vpn.netdev
[NetDev]
Name=tun5
Kind=tun

[Tun]
User=vpn
Group=network
/etc/systemd/network/vpn.network
[Match]
Name=tun5

[Address]
Address=192.168.200.2/24

作成したら systemd-networkd.service再起動して有効化してください。

ip tunnel コマンドで tun インターフェイスを管理することができます。

SSH コマンドでインターフェイスを作成

SSH は両方のインターフェイスを自動的に作成しますが、接続が確立した後に IP とルーティングを設定する必要があります:

$ ssh -o PermitLocalCommand=yes \
      -o LocalCommand="sudo ifconfig tun5 192.168.244.2 pointopoint 192.168.244.1 netmask 255.255.255.0" \
      -o ServerAliveInterval=60 \
      -w 5:5 vpn@example.com \
      'sudo ifconfig tun5 192.168.244.1 pointopoint 192.168.244.2 netmask 255.255.255.0; echo tun0 ready'

SSH の起動

$ ssh -f -w5:5 vpn@example.com -i ~/.ssh/key "sleep 1000000000"

あるいは NAT を使用している場合、keep-alive オプションを追加します:

$ ssh -f -w5:5 vpn@example.com \
      -o ServerAliveInterval=30 \
      -o ServerAliveCountMax=5 \
      -o TCPKeepAlive=yes \
      -i ~/.ssh/key "sleep 1000000000"

トラブルシューティング

  • ssh に tun インターフェイスへアクセス・作成する権限が必要です。tun インターフェイスや /dev/net/tun の所有者を確認してください。
  • シングルマシンではなくネットワークにアクセスしたい場合は IP パケットフォワーディング、ルーティング、両方のファイアウォールを設定する必要があります。

PPP over SSH を使う

pppd を使用することで簡単に SSH サーバー経由のトンネルを作成できます:

# pppd updetach noauth silent nodeflate pty "/usr/bin/ssh root@remote-gw /usr/sbin/pppd nodetach notty noauth" ipparam vpn 10.0.8.1:10.0.8.2

VPN が確立されたら、トラフィックを転送することができます。内部ネットワークにアクセスするには:

# ip route add 192.168.0.0/16 via 10.0.8.2

暗号化されていないネットワークでの通信を保護するために、全てのインターネット通信をトンネル経由で転送するには、通常のゲートウェイ経由で SSH サーバーのルーティングを追加します:

# ip route add <remote-gw> via <current default gateway>

それから、デフォルトのルーティングをトンネルで置き換えてください:

# ip route replace default via 10.0.8.2

ヘルパースクリプト

pvpnpppd over SSH を使うためのラッパースクリプトです。pvpnAUR パッケージでインストールできます。

参照