OpenConnectとocproxyを使ってみる

在籍している大学では学内ネットワークを外部からVPNで利用できたりする。学内だけで公開しているwebページをみたり、研究室のサーバを学内だけで公開してsshで接続したりとか、そんな感じにしか使っていないけど。

VPNを利用する際、GUIクライアントが用意されていることが多いし、MacWindowsでも標準でクライアントが付いてる。だけど、マシンが行なっている通信がすべてVPNを通して行われているのはなんかアレで。帯域が狭くなったりするし、本来の目的とは関係ない通信が管理者にわかってしまうし。

知人に「OpenConnectってツールがある」って聞いたので、OpenConnectとocproxyを使ってSOCKSプロキシ経由でVPNをやっていこうって感じの話です。

インストール

Homebrewでインストールできる。

$ brew install openconnect ocproxy

OpenConnect

www.infradead.org

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

github.com

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:2222unix-host:22を、localhost:3389win-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

chrome.google.com

OpenConnectとかとは関係ないけど、便利なので紹介。ブラウザが利用するプロキシを管理したり、切り替えたりできるChrome拡張。いちいちMacのプロキシ設定やChromeのプロキシ設定をしなくてもよくなる。設定もダンプできるのでマシンを切り替えるときも設定ファイルをインポートすればすぐに使えるので便利。


というわけで、OpenConnectとocproxyでVPNという話でした。Pulse Connect Secureのクライアントは起動も少し遅いし、アップデートでこけたりしたので代替品が見つかってよかった。