---
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を読むことを推奨。