--- title: 工学院大学のVPNを使いやすくする description: 工学院大学のVPNにOpenConnectで接続することで人権を得られた tags: Linux langs: ja-jp GA: UA-107906006-2 --- # 工学院大学のVPNを使いやすくする ## はじめに :::success この記事は、[Kogakuin Univ Advent Calendar 2018](https://adventar.org/calendars/2917 "Kogakuin Univ Advent Calendar 2018")の23日目です。 - prev choll_kog :pro: [The Fruits of Kogakuin](http://choll.hatenablog.com/entry/2018/12/19/194227 "The Fruits of Kogakuin") - next teapot [なんか書く](# "なんか書く") ::: こんにちは。 昨日は偉大なるcholl_kog :pro:の[記事](http://choll.hatenablog.com/entry/2018/12/19/194227 "The Fruits of Kogakuin")でした。 今年ももう終わりに近づき、Advent Calendarも今日を含めて後3日です。 自分を始めとした多くの3年生の皆さんはすでに研究室に配属され、研究を始めていたり、研究室の課題に追われていたりするかと思います。 私の研究室では2つの課題が出ており、[ネットワークシミュレータ](https://github.com/grncbg/ANSL-NetworkSimulator "grncbg/ANSL-NetworkSimulator")を作ったり、NS-3を動かしたりしています。 その際、研究室内のサーバでプログラムを実行する必要があるのですが、学外からサーバに接続するためには工学院大学のVPNに繋ぐ必要があります。しかし、学校が提示しているPulse Secureで接続すると、すべての通信をVPNに通してしまうため面倒です。 そこで、OpenConnectを使って人権を得る方法を説明します。 ## 概要 研究室に配属され、研究室のサーバで開発を行うことになったが、VPNに接続するのが面倒なのでもっと簡単に接続したい。 OpenConnectを用いることで、必要な通信だけVPNを通すことができるようにした。 ## 背景 研究室に配属され、研究室のサーバで開発を行うことになったが、接続するのが面倒。具体的には以下の手順である。 1. 工学院大学のVPNに接続する  Pulse SecureからVPNに接続する。 GUIを動かすのが面倒。 1. 適切にネットワークの設定をする (Proxyを通す or ルーティングの設定をする) - Proxyを通す 工学院生お馴染みのいつものプロキシの設定をする。 ソフトウェアごとに設定が必要だったり、外部へのSSHができなくなったりして面倒。 - ルーティングの設定をする 学外だったらVPNを通さないようルーティングの設定をする。 SSHできるので人権はあるが、設定が面倒。Pulse Secureが定期的にルーティングテーブルを上書きしてくるのが厄介 1. 研究室の踏み台サーバに接続する 踏み台サーバにSSHで接続する。 1. 研究室のサーバに接続する 踏み台サーバを経由して研究室のサーバに接続する。 この中で、特に面倒なのがVPNの設定である。今までは[スクリプト](https://gist.github.com/grncbg/6a107422520f63483a78cea11492531c "VPN")を書いて設定していたが、もっと楽に接続したい。 ## 目的 VPNに簡単に接続できるようにする。その際、他の通信に影響を及ぼさないよう、学外への通信はVPNを通さないようにしたい。 ## 手法 ### 環境 クライアントはUbuntu 18.10を利用した。 ### VPN接続 #### OpenConnectのインストール aptでインストール可能。 ```bash sudo apt install openconnect ``` #### 設定ファイルの作成 `/etc/openconnect`を作成し、設定ファイルを設置する。 ##### 起動設定 まずはopenconnectの起動オプションを設定するファイル`/etc/openconnect/config`を作成し、以下の内容を記載する。`<user>`には自分のユーザ名を入れる。 ```bash user <user> passwd-on-stdin juniper script /etc/openconnect/script ``` `user`は接続するユーザを指定するオプション。 `passwd-on-stdin`は標準入力からパスワードを受け取るオプション。 `juniper`はJuniperのVPNに接続するオプション(Pulse SecureはJuniperの製品)。 `script`は次のルーティングスクリプトを読み込むための設定。 ##### ルーティング設定 次にルーティング設定を書くファイル`/etc/openconnect/script`を作成し、以下の内容を記載する。 ```bash export CISCO_SPLIT_INC=1 export CISCO_SPLIT_INC_0_ADDR=133.80.0.0 export CISCO_SPLIT_INC_0_MASKLEN=16 exec /usr/share/vpnc-scripts/vpnc-script ``` `CISCO_SPLIT_INC`は接続対象のルールの数。今回は学校のIPのみなので1。 `CISCO_SPLIT_INC_n_ADDR`はn番目の接続対象のIPアドレス。今回は工学院大学のIPを指定したいので133.80.0.0。 `CISCO_SPLIT_INC_0_MASKLEN`はn番目の接続対象のサブネットマスク。今回は工学院大学のIPを指定したいので16。 このスクリプトファイルには、実行権限をつけておく。 ```bash sudo chmod +x /etc/openconnect/script ``` #### 起動用スクリプトの設置 systemdで起動したいので、serviceファイルを書く。 `/etc/systemd/system/vpn.service`に以下のファイルを設置する。`<password>`には自分のパスワードを入れる。 ```bash [Unit] Description=Connect to VPN After=network.target [Service] Type=simple Environment="password=<password>" ExecStart=/bin/sh -c 'echo $password | openconnect --config=/etc/openconnect/config vpn.ccs.kogakuin.ac.jp' ExecStop=/bin/kill -INT $MAINPID Restart=always [Install] WantedBy=multi-user.target ``` ### 実行 準備ができたので実行してみる。以下を実行すると、vpnに接続できるはずである。 ```bash sudo systemctl daemon-reload sudo systemctl start vpn ``` ステータスを確認すると、 ```bash $ sudo systemctl status vpn ● vpn.service - Connect to VPN Loaded: loaded (/etc/systemd/system/vpn.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2018-12-23 13:35:56 UTC; 3min 50s ago Main PID: 16496 (sh) Tasks: 2 (limit: 4915) Memory: 6.0M CGroup: /system.slice/vpn.service ├─16496 /bin/sh -c echo $password | openconnect --config=/etc/openconnect/config vpn.ccs.kogakuin.ac.jp └─16498 openconnect --config=/etc/openconnect/config vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: GET https://vpn.ccs.kogakuin.ac.jp/dana/home/starter0.cgi?check=yes 12月 23 13:36:02 teapot-dynabook sh[16496]: SSL negotiation with vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: Connected to HTTPS on vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: SSL negotiation with vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: Connected to HTTPS on vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: SSL negotiation with vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: Connected to HTTPS on vpn.ccs.kogakuin.ac.jp 12月 23 13:36:02 teapot-dynabook sh[16496]: Connected as 133.80.132.101, using SSL 12月 23 13:36:02 teapot-dynabook sh[16496]: RTNETLINK answers: File exists 12月 23 13:36:02 teapot-dynabook sh[16496]: ESP session established with server ``` のように正しく実行されている。 ## まとめ OpenConnectを使うことで、比較的簡単に人権を得ることができた。 ## 参考文献 - [JuniperのNetwork Connect利用時に外部にアクセスする](http://lightnet328.hatenablog.com/entry/2016/12/30/191233 "JuniperのNetwork Connect利用時に外部にアクセスする") ルーティングの設定部分が動かなかった。連番が1からになっているが、正しくは0からだと考えられる。 - [OpenConnect VPN client.](http://www.infradead.org/openconnect/manual.html "OpenConnect VPN client.") manの内容と一部に差異(vpnc-scriptのパスとか)があるので、manを読むことを推奨。