在籍している大学では学内ネットワークを外部からVPNで利用できたりする。学内だけで公開しているwebページをみたり、研究室のサーバを学内だけで公開してsshで接続したりとか、そんな感じにしか使っていないけど。
VPNを利用する際、GUIクライアントが用意されていることが多いし、MacやWindowsでも標準でクライアントが付いてる。だけど、マシンが行なっている通信がすべてVPNを通して行われているのはなんかアレで。帯域が狭くなったりするし、本来の目的とは関係ない通信が管理者にわかってしまうし。
知人に「OpenConnectってツールがある」って聞いたので、OpenConnectとocproxyを使ってSOCKSプロキシ経由でVPNをやっていこうって感じの話です。
インストール
Homebrewでインストールできる。
$ brew install openconnect ocproxy
OpenConnect
CiscoのAnyConnect SSL VPNやJuniper SSL VPN(Pulse Connect Secure)、Palo Alto Networks GlobalProtect SSL VPNを非公式にサポートしているVPNクライアント。以下のような感じで利用できる。
$ openconnect https://vpn.mycampany.com
GUIでも利用できるみたいだけどGithubみたらArchivedになってた。
ocproxy
OpenConnectの通信をSOCKSプロキシ経由でポートフォワーディングしてくれるツール。指定したポート経由でVPNできるので、ホストの通信を分けたりできるので便利。例えばこんな感じで使うようだ。
$ openconnect --script-tun --script \ "./ocproxy -L 2222:unix-host:22 -L 3389:win-host:3389 -D 11080" \ vpn.example.com
SOCKSプロキシをlocalhost:11080
にたてて、localhost:2222
にunix-host:22
を、localhost:3389
にwin-host:3389
を割り当てている。この状態で、ssh localhost:22
とすればunix-hostに接続できるし、リモートデスクトップクライアントでlocalhost:3389
に繋げばwin-hostに接続できる。ブラウザの使うプロキシにlocalhost:11080
を設定すれば、社内や学内専用のページをみることだってできる。
SOCKSプロキシ経由してなければVPNを通して通信されないので、YoutubeをみたりしてもVPNでの通信を圧迫しないし、管理者にも知られない。うーん、便利。
自分はこんな感じで利用している。大学で利用しているVPNがPulse Connect Secureなので--protocol=pulse
で使いたいがなんか接続できない。代わりにJuniper SSL VPNで接続するために、--protocol=nc
にしている。
$ openconnect --script-tun --script \ "ocproxy -D 11080" \ --protocol=nc https://vpn.hoge.ac.jp
Proxy SwitchyOmega
OpenConnectとかとは関係ないけど、便利なので紹介。ブラウザが利用するプロキシを管理したり、切り替えたりできるChrome拡張。いちいちMacのプロキシ設定やChromeのプロキシ設定をしなくてもよくなる。設定もダンプできるのでマシンを切り替えるときも設定ファイルをインポートすればすぐに使えるので便利。
というわけで、OpenConnectとocproxyでVPNという話でした。Pulse Connect Secureのクライアントは起動も少し遅いし、アップデートでこけたりしたので代替品が見つかってよかった。