2016-12-09

ocproxy で TUT VPN を賢く使う

この記事は TUT Advent Calendar 2016 の9日目の記事です.

みなさん, 技科大の VPN (リンク先は学内限定) を使ってますか. 今月から教務システムが更新され,成績情報がVPN経由で普通に閲覧可能になり (2017年09月20日追記: メンテナンス中の一時的なものだったようです), TUT VPN の利便性はますます高まっています.

TUT VPN は Cisco の VPN を採用しています. 普通は Cisco の提供する AnyConnect などを使って接続しますね. TUT VPN で使われている AnyConnect SSL VPN Protocol の仕様は残念ながら公開されていないのですが, それと互換のある OpenConnect VPN Protocol は IETF に仕様のドラフトが公開されています. また,この実装である OpenConnect は,GNU LGPL で公開されています. そのため,OpenConnect をインストールすれば, 以下のようにして TUT VPN に接続することができます.

yaourt -S openconnect # openconnect をインストール
sudo openconnect -u x123456 gw.vpn.xxx.xx.xx # 接続

(x123456 は IMC のアカウント名,gw.vpn.xxx.xx.xx は接続先サーバ名)

しかしながら AnyConnect や OpenConnect は, ホスト上のすべてのネットワークトラフィックをハイジャックしてしまうため, あらゆる通信が技科大経由になってしまい, 何がとは言いませんがビミョーに不便なんですよね. そこでいろいろ試してみたら, ocproxy というソフトウェアが便利だったので,紹介いたします.

概要

ocproxy は OpenConnect と連携して動作するプロキシソフトウェアです. OpenConnect VPN に接続する SOCKS サーバを提供します.

メリット

  • 必要なソフトウェアのみ VPN を通すことができます
  • OpenConnect の起動に root 権限の必要がなくなります

デメリット

  • SOCKS に対応したソフトウェア以外は VPN 接続を行うことができません (tsocks を使うと解決できるのかな,わからない)

インストール

openconnect (TUTVPN に接続するため), ocproxy (OpenConnect の通信を仲介するプロキシを立てるため), connect (SOCKS サーバに接続するため)の 3 つのソフトウェアが必要です.

yaourt を導入した Arch Linux の場合,以下のようにして導入することができます.

yaourt -S openconnect ocproxy-git connect

起動

以下のコマンドで 10484 番ポートに SOCKS プロキシが立ちます.

openconnect --script-tun --script 'ocproxy -D 10484' -u x123456 gw.vpn.xxx.xx.xx

本プロキシを経由したネットワークトラフィックは TUT VPN を経由します. すなわち,SOCKS に対応したアプリケーションであれば, localhost:10484 を指定することで TUTVPN 経由で接続することができます.

OpenSSH

たとえば,SSH で wlinux.edu.tut.ac.jp に接続するなら,以下のようにすればよいです.

ssh -o ProxyCommand='connect -S localhost:10484 %h %p' x123456@wlinux.edu.tut.ac.jp

また,.ssh/config

Host wlinux.tutvpn
  Hostname wlinux.edu.tut.ac.jp
  User x123456
  ProxyCommand connect -S localhost:10484 %h %p

のように追記すると,

ssh wlinux.tutvpn

で接続できて便利です.

もちろん scp もできます.

scp wdev.tutvpn:~/hoge.taz .

Chromium

以下のようにして Chromium (Google Chrome も同様?) を立ち上げると, VPN 経由でブラウザが利用できます.

chromium --proxy-server="socks5://localhost:10484"

但し,すでに Chromium が起動している状態で, 上記のコマンドを入力して新たなプロセスを立ち上げても, それは VPN 経由とはならないようなのでご注意下さい.

おわりに

今回の記事では,特定のアプリケーションのみを TUT VPN に接続する方法について述べました. 何か質問等あれば,Twitter あたりでご連絡下さい.

さて,明日は @ponzu_meisterさんの記事です. いろいろな意味で謎の記事なので,今から楽しみです.