UECのL2TP/IPSecVPNをOpenWrtで張る備忘録


環境

  • OpenWrt 21.02.0-rc4 r16256-2d5ee43dc6
  • Core i7 3930K
  • RAM 64GB

必要なpackage

  • strongswan-full(fullは要らないかもしれない)
  • xl2tpd
opkg install strongswan-full
opkg install xl2tpd

strongswanでIPSecの設定

/etc/ipsec.confでコネクションの設定

connの部分は好きな名前で(例ではuec-vpn)
後で接続の時とかに使う

/etc/ipsec.conf
conn uec-vpn
        type=transport
        authby=secret
        rekey=yes
        keyingtries=1
        keyexchange=ikev1
        ike=aes128-sha1-modp1024
        esp=aes128-sha1
        left=%any
        leftprotoport=udp/l2tp
        right=VPNサーバのIP
        rightprotoport=udp/%any
        auto=start
        dpdaction=restart

/etc/ipsec.secretsで事前共有鍵の設定

半角スペースでちゃんと区切らないとうまく読み込まない
鍵が見つからない的なエラーは大体そのせい

/etc/ipsec.secrets
VPNサーバのIP : PSK "事前共有鍵"

接続

接続前にipsecをリロードすること

/etc/init.d/ipsec reload

ipsec upで接続

ipsec up uec-vpn

ステータス叩いてupしていれば成功

ipsec status uec-vpn

以下のようなログがでるはず

Security Associations (1 up, 0 connecting):
(略)

xl2tpdでL2TPの設定

/etc/xl2tpd/xl2tpd.confの設定

globalセクションはいじらなくていいはず

/etc/xl2tpd/xl2tpd.conf
[lac uec-vpn]
lns = VPNサーバのアドレス
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

/etc/ppp/options.xl2tpdの設定

/etc/xl2tpd/xl2tpd.confのpppoptfileの部分で指定したファイル

name "UECアカウント名"
password "パスワード"
noauth
debug
dump
usepeerdns
logfd 2
logfile /var/log/xl2tpd.log #好きな場所に
noccp
novj
novjccomp
nopcomp
noaccomp
mtu 1200 #小さめにしとくと安定するらしい
mru 1200

接続

接続前にxl2tpdをreloadすること

/etc/init.d/xl2tpd reload

xl2tpd-control connect-lacで接続

xl2tpd-control connect-lac uec-vpn

ここでログファイル(例では/var/log/xl2tpd.log)を確認
うまく行けば以下のようなログが出てるはず

/var/log/xl2tpd.log
(略)
local  IP address xx.xx.xx.xx
remote IP address x.x.x.x
primary   DNS address UECのプライマリDNSサーバIP
secondary DNS address UECのセカンダリDNSサーバIP

ip aとかで確認してppp0とかができていれば成功
私は先にルーティング設定を行っていて激ハマりしたので繋ぐまではルーティング設定を切っとくと吉

ルーティングとか設定とか

インターフェースの設定

できたppp0等のインターフェースはOpenWrt側ではアンマネージドにすること
名前はUEC_VPNとかにするといい
新しいファイアウォールのゾーンを作って所属させる

ファイアウォールの設定

先程作ったゾーン(例ではUEC_VPN)に対して以下のように設定する

  • lan → UEC_VPN
    • input:accept
    • output:accept
    • forward:accept
    • Masquerading:No
  • UEC_VPN → lan
    • input:reject
    • output:accept
    • forward:reject
    • Masquerading:Yes

ルーティングの設定

UEC向けのパケットは全部VPNに流したいが、VPNサーバだけはwanを通るようにする
静的ルーティングを設定する

  • interface:wan
    • ターゲット:UECのVPNサーバのIP
    • IPv4-ネットマスク:255.255.255.255
    • メトリック:0
  • interface:UEC_VPN
    • ターゲット:130.153.0.0
    • IPv4-ネットマスク:255.255.0.0
    • IPv4-ゲートウェイ:なし
    • メトリック:0より大きくする

確認

学務情報システムとかにアクセスして二要素認証が求められなければ成功
つながらない場合はファイアウォールの設定やルーティング設定を見直すこと
学内からアクセスしたことにしたい場合はプロキシを通すと楽
dl.acm.org等にプロキシを通してアクセスすると論文を落とせる
chromeの拡張でProxySwitchyOmegaを入れるとサイトごとにプロキシ設定を変えられるので捗る

情報基盤センターはITCユーザーズガイドのlinux向け設定記事を作成するかSSLVPNを復活させてくださいお願いします

2022-04-07追記

ルーティングの設定でUEC向けの通信を全部VPNに流しているため、学内からおうちへプロキシ経由でVPNを張るとパケットが虚空へ消える
httpプロキシまたはsocksプロキシへの通信はwanへ飛ばすようにルーティングする