VPNを利用する事ができる高価なルータなどの機器がなくても、sshでさえ繋がることができれば、簡易VPNのようなアクセスを可能にするsshuttleが便利だったので紹介します。
sshuttleとは?
Linux, MacOS, FreeBSDをサポートするSSH越しにリモートネットワークへのアクセスを可能にするソフトウェアです。実態としては、Linuxであればiptables
をMacOSではipfw
を利用して、リモートネットワーク宛てのパケットをSSHコネクションを張ったトンネルを通してアクセスできるように設定してくれるソフトウェアです。
今までSSH Port Forwardingを1ポートずつ設定や起動をしていた人も多いかと思います。sshuttle
を利用するとリモート先のネットワークを指定するだけで、あとは全部よしなにやってくれるようになります。
IPSecやPPTPなどのプロトコルをしゃべることのできる高価なルータや機器を用意する必要もなく、汎用的なSSHサーバを用意するだけで実現できるのはとても便利です。
インストール方法
環境はMac OSXを前提にして解説します。
Homebrewをインストールしている環境であれば
$ brew install sshuttle
とすればsshuttle
がインストールされます。
トンネルのつくりかた
VPN先のネットワークが192.168.230/24
だとすると
$ sshuttle -r ユーザー名@ホスト名 192.168.230.0/24
Connected.
このようにコマンドを打つだけです。ipfw
の設定するためにsudo
のパスワードを求められます。
ipfw
の設定を確認すると
$ sudo ipfw list
12300 check-state12300 fwd 127.0.0.1,12300 tcp from any to 192.168.230.0/24 not ipttl 42 setup keep-state
12300 skipto 12301 tcp from any to 127.0.0.0/8
65535 allow ip from any to any
$ netstat -an | grep 12300
tcp4 0 0 127.0.0.1.12300 *.* LISTEN
パケットの宛先がVPN先のネットワーク192.168.230/24
の場合は、自分のホスト(127.0.0.1)のPort 12300宛てにパケットを転送される設定がipfw
に追加されています。
これでVPN先の192.168.230/24
と通信することができるようになりました。
その他の詳しい設定やDNS tunnelingもできるので、詳しくは公式サイトのドキュメントをご覧ください。