OpenWrtを使っておうちキャンパスを作ろう

ots
12 min readDec 19, 2020

--

こちらはUEC Advent Calendar 2020の20日目の記事です。

こんにちは。UEC18のots(@_oott_)です。特に自己紹介するようなこともないので早速本編に入りましょう。

概要

OpenWrtはオープンソースの無線ルータ向けファームウェアです。Linuxをベースに作られておりパッケージを追加することで様々な機能を追加することができます。本記事ではOpenWrtルータをセットアップした後に、電通大へのVPN接続を行わせてLAN内の端末から学内に向けての通信をVPN経由で行われるようにします。

OpenWrtのインストール

インストールの手順は使用するルータごとに異なるので頑張って調べてください。市販ルータで作る方は、こちらサイト(鉄PCブログ)には対応デバイスと各デバイスのインストール手順などがあるので参照すると良いです。今回はx86_64のマシンをOpenWrtルータにします。

2020年12月19日時点での最新バージョン19.07.5のx86_64向けイメージはここから入手できます。いくつかイメージが用意してありますが今回は combined-ext4.img.gzを選択します。combinedのイメージはブートローダーも含んだ全部盛りで、rootfsはその名の通りルート以下のデータだけが含まれています。ext4とsquashfsはルートのファイルシステムの違いだけなのでお好きな方をどうぞ。解凍したイメージをHDDやSSD等にddで書き込んでBIOSで起動デバイスに設定するだけで起動します。簡単ですね。

OpenWrtの初期セットアップ

この記事では既に存在するルータの下にOpenWrtのルータを構築することにします。イメージはこんな感じです。

OpenWrtを書き込んで起動したルータに端末を接続したら http://192.168.1.1/ にアクセスしてみましょう。次の図のような画面が現れると思います。初期状態ではパスワードはセットされていませんので Login を押すだけで管理画面にログインできます。

ログインできたらまずはrootのパスワードを設定しましょう。System > Administration からパスワードを設定できます。

次にwanインターフェースの設定です。Network > Interfaces の順に進むと次の画面が現れます。既に自動生成されたlanインターフェースが存在しますね。新しいインターフェースを追加するには Add new interface… をクリックします。

Nameは何でも良いですが、プリセットのファイアウォール設定が自動で適用されるためwanとするのが推奨です。Protocolは上位にDHCPでアドレスを振ってくれる既存ルータがいるのでDHCP clientを選択します。PPPoEや(パッケージを追加すれば)DS-Liteも選択できます。Bridge interfacesはONでもOFFでもどちらでも構いませんが特に必要ないのでここではOFFにします。Interfaceは既存ルータに繋がっているNICを指定します。これらを設定したらCreate interfaceをクリックします。

インターフェースが作成されると詳細設定画面に遷移します。特に変更する点はありませんがFirewall Settingsタブでゾーンwanに割り当てられている事を確認してください(もし割り当てられていなかったら — custom — 欄にwanと入力してEnterを押します)。確認したらSaveをクリックします。

この時点ではまだ変更は反映されていないので、Save & Applyをクリックして設定を保存して適用させます。

適用されたらNetwork > Diagnosticsから接続をテストしておきましょう。これはIPv4 Pingを実行して成功した例です。

以上でOpenWrtの初期セットアップは完了です。

VPN接続の設定

パッケージのインストール

System > Softwareからパッケージをインストールできます。

まずはUpdate lists…をクリックしてパッケージリストを取得します。特にエラーなどが起きていなければDismissをクリックしてダイアログを閉じます。

l2tpに必要なパッケージ”xl2tpd”をインストールします。Filter欄にxl2tpdと入力してInstall…をクリックします。

依存関係などが表示されたらInstallをクリックします。

インストールログが表示されます。特に問題がなければそのまま閉じます。

同様の手順でipsecに必要なパッケージ”strongswan-default”もインストールしてください。パッケージのインストールが完了したらSystem > Rebootから再起動を行うことを推奨します。

ipsecの設定

再起動が完了したらルータにSSH接続します。

$ ssh root@192.168.1.1

まずは /etc/ipsec.conf を編集します。leftの値だけOpenWrtルータのwanインターフェースのipアドレスへ変更する必要があります。ここでは192.168.10.132です。

root@OpenWrt:~# vi /etc/ipsec.conf
# 次の内容を追記
conn uec
keyingtries=%forever
keyexchange=ikev1
authby=secret
right=130.153.8.71
ike=3des-sha1-modp1024!
esp=3des-sha1-modp1024!
auto=start
left=192.168.10.132
leftprotoport=17/1701
rightprotoport=17/1701
type=transport

次に /etc/ipsec.secrets を編集します。 事前共有鍵の部分を情報基盤センターから入手した事前共有鍵に置き換えてください。

root@OpenWrt:~# vi /etc/ipsec.secrets
# 次の内容を追記
130.153.8.71 : PSK "事前共有鍵"

ipsecを再起動して接続をテストします。

root@OpenWrt:~# ipsec restart
Stopping strongSwan IPsec...
Starting strongSwan 5.8.2 IPsec [starter]...
root@OpenWrt:~# ipsec up uec
generating QUICK_MODE request 3409509476 [ HASH SA No KE ID ID NAT-OA NAT-OA ]
sending packet: from 192.168.10.132[4500] to 130.153.8.71[4500] (324 bytes)
received packet: from 130.153.8.71[4500] to 192.168.10.132[4500] (308 bytes)
parsed QUICK_MODE response 3409509476 [ HASH SA No KE ID ID NAT-OA NAT-OA ]
selected proposal: ESP:3DES_CBC/HMAC_SHA1_96/MODP_1024/NO_EXT_SEQ
detected rekeying of CHILD_SA uec{1}
CHILD_SA uec{2} established with SPIs cc683401_i 66cf4cd1_o and TS 192.168.10.132/32[udp/l2f] === 130.153.8.71/32[udp/l2f]
generating QUICK_MODE request 3409509476 [ HASH ]
sending packet: from 192.168.10.132[4500] to 130.153.8.71[4500] (60 bytes)
connection 'uec' established successfully

ipsec statusの出力がこんな感じならば接続成功です。

root@OpenWrt:~# ipsec status
Security Associations (1 up, 0 connecting):
uec[1]: ESTABLISHED 25 seconds ago, 192.168.10.132[192.168.10.132]...130.153.8.71[130.153.8.71]
uec{1}: REKEYED, TRANSPORT, reqid 1, expires in 59 minutes
uec{1}: 192.168.10.132/32[udp/l2f] === 130.153.8.71/32[udp/l2f]
uec{2}: INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: cc683401_i 66cf4cd1_o
uec{2}: 192.168.10.132/32[udp/l2f] === 130.153.8.71/32[udp/l2f]

最後にサービスを有効にしましょう。

root@OpenWrt:~# service ipsec enable

L2TPの設定

L2TPの設定はWebUIで行います。

Network > Interfaces に進み、 Add new interface… から新規インターフェイスを作成します。

Nameは何でもいいです。ここではuecにしました。ProtocolはL2TPを選んで Create interface をクリックします。

General Settingsです。L2TPサーバーは130.153.8.71(vpn.cc.uec.ac.jp)、usernameはUECアカウント名、passwordはUECアカウントのパスワードを入力します。

Advanced Settingsです。Use default gatewayとUse DNS servers advertised by peerのチェックを外します。

最後にFirewall Settingsです。VPN接続専用のゾーンを作成しても良いですがwanと同じルールにするほうが簡単です。ここまで設定したらSaveをクリックします。

Save & Applyをクリックして変更を反映させます。

インターフェースにアドレスが割り当てられていれば接続成功です。

ルートの設定

最後に学内あての通信がuecインターフェース経由で出ていくようにします。

Network > Static Routes に進んで静的ルートの設定画面を開いてAddをクリックします。

上記のように設定してVPNサーバ(130.153.8.71)への通信はwan経由で行われるようにします。IPv4-Gatewayの値は既存ルータのIPアドレス(ここでは192.168.10.1)を設定します。設定したらSaveをクリックします。

経路一覧が下記のようになるように残りのルートも追加してください。追加し終わったらSave & Applyをクリックして変更を反映させます。

以上で全ての手順が終了です。

いかがでしたか?

え?こんなのめんどくさい?僕もそう思います。WindowsのPCで学内宛の通信だけをVPN経由にしたいだけならば次のコマンドで実現できます(マカーの皆さんは自分で調べてみてください)。

VPNの接続名(Name)を調べる:

Get-VpnConnection

(以下NameがUECとした場合のコマンド)

VPN接続時にデフォルトゲートウェイを変更しない:

Set-VpnConnection -Name UEC -SplitTunneling $true

VPN接続時にルートを追加:

Add-VpnConnectionRoute UEC -DestinationPrefix “130.153.0.0/16” -PassThru
Add-VpnConnectionRoute UEC -DestinationPrefix “172.21.0.0/16” -PassThru

明日21日はうどん(@udonkonek)さんの記事です。楽しみですね。

UEC Advent Calendar 2020に戻る

--

--