VPNクライアント構築 – strongswan/xl2tpd [Raspberry Pi]

・目的

Raspberry pi 3 Model B+ に VPNクライアントをインストールし、さくらのVPSに構築したVPNサーバと接続する

#-- 必要なアプリケーションのインストール
apt-get install xl2tpd strongswan ike-scan

#-- strongswan の設定
#-- ***.***.***.*** には VPNサーバのIPアドレスを入力する
cp -p /etc/ipsec.conf{,.org}
cat <<_EOL_> /etc/ipsec.conf
config setup
include /var/lib/strongswan/ipsec.conf.inc
conn %default
    keyingtries=0
conn sakura
    keyexchange=ikev1
    authby=secret
    right=***.***.***.***
    ike=3des-sha1-modp1024!
    esp=3des-sha1!
    auto=start
    left=%any
    leftprotoport=udp/1701
    rightprotoport=udp/1701
    type=transport
_EOL_

#-- 共通パスフレーズ の設定
cat <<_EOL_>/etc/ipsec.secrets
: PSK "PreSharedKey"
_EOL_

#-- xl2tpd の設定
cat <<_EOL_>>/etc/xl2tpd/xl2tpd.conf
[lac sakura]
lns = ***.***.***.***
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes
autodial = yes
redial = yes
redial timeout = 10
max redials = 6
_EOL_

#-- name には VPN接続のアカウント、password はパスワードを入力する
cat <<_EOL_>/etc/ppp/options.l2tpd.client
name *****@****.***
password ********
ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-pap
noccp
noauth
idle 1800
mtu 1410
mru 1410
defaultroute
usepeerdns
debug
connect-delay 5000
_EOL_

#-- strongswant と xl2tpd の起動設定
systemctl enable ipsec xl2tpd
systemctl start ipsec xl2tpd

#-- VPNサーバと接続
echo "c sakura" > /var/run/xl2tpd/l2tp-control

19. VPNサーバの構築 – strongswan/xl2tpd/freeradius [さくらのVPS/CentOS7]

・VPNサーバの用途

  1. 外部からVPNサーバを経由して自宅環境にログインする
  2. radiko で大阪のラジオ放送を聴く

・strongswan, xl2tp, freeradius のインストール

#-- 変数に必要な値を代入
IPV4=$(ip addr show eth0 | awk '/inet /{print $2}' | sed 's#/.*##')

#-- strongswan, xl2tpd, freeradius をインストール
yum install -y xl2tpd strongswan freeradius freeradius-utils freeradius-ldap radiusclient-ng

#-- VPNで使用するIPアドレスを eth0 に 追加
cat <<_EOL_>> /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR1=192.168.0.1
PREFIX1=24
_EOL_

systemctl restart network

#-- strongwan の設定
cat <<_EOL_>> /etc/strongswan/ipsec.conf
conn %default
    auto=add
    keyexchange=ikev1
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    authby=secret
    rekey=no
    keyingtries=3
    type=transport
    keyexchange=ikev1
    left=%defaultroute
    leftprotoport=udp/1701
    right=%any
    rightprotoport=udp/%any

conn L2TP
    left=${IPV4}
    # for Android 6
    ike=aes256-sha1-modp1024,3des-sha1-modp1024!
    esp=aes256-sha1,3des-sha1!
_EOL_

#-- 共通シークレットはお好みで
cat <<_EOL_>> /etc/strongswan/ipsec.secrets
: PSK "PreSharedKey"
_EOL_

cat <<_EOL_> /etc/strongswan/strongswan.conf
# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files

charon {
    load_modular = yes
    plugins {
        include strongswan.d/charon/*.conf
    }
    dns1=127.0.0.1
    dns2=8.8.8.8
}

include strongswan.d/*.conf
_EOL_

#-- strongswan の起動
systemctl enable strongswan
systemctl start strongswan

#-- radius の設定 (LDAP認証)
sed -i -e "s/base_dn = 'dc=example,dc=org'/base_dn = ''/" \
 -e 's/filter = "(uid=.*/filter = "(mailRoutingAddress=%{%{Stripped-User-Name}:-%{User-Name}})"/' /etc/raddb/mods-available/ldap

ln -s ../mods-available/ldap /etc/raddb/mods-enabled/ldap

sed -i -e 's/-ldap/-ldap\n\tif ((ok || updated) \&\& User-Password) { update control { Auth-Type := ldap } }/' \
  -e 's/.*Auth-Type LDAP {/\tAuth-Type LDAP {\n\t\tldap\n\t}\n#\tAuth-Type LDAP {/' /etc/raddb/sites-available/default

cat <<_EOL_ >> /etc/raddb/dictionary
VALUE Auth-Type LDAP 5
_EOL_

#-- radiusd の起動
systemctl enable radiusd
systemctl start radiusd

#-- radiusclient の設定
ln -s radiusclient-ng /etc/radiusclient

sed -i -e 's/auth_order\tradius,local/auth_order\tradius/' -e 's/bindaddr.*/#bindaddr */' /etc/radiusclient-ng/radiusclient.conf

#-- testing123 は使ってないので何でもいいはず
cat <<_EOL_>> /etc/radiusclient-ng/servers
localhost testing123
_EOL_

#-- xl2tpd の設定 (192.168.0.101 から 192.168.0.200 をクライアントに割り当てる)
cat <<_EOL_>/etc/xl2tpd/xl2tpd.conf
[global]
listen-addr = ${IPV4}

[lns default]
ip range = 192.168.0.101-192.168.0.200
local ip = 192.168.0.1
require authentication = yes
name = LinuxVPNserver
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
_EOL_

cat <<_EOL_>/etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns  127.0.0.1
ms-dns  8.8.8.8
noccp
auth
idle 1800
mtu 1410
mru 1410
nodefaultroute
proxyarp
connect-delay 5000
require-pap
refuse-chap
refuse-mschap
refuse-mschap-v2
logfile /var/log/xl2tpd.log
plugin radius.so
plugin radattr.so
_EOL_

#-- xl2tpd の起動
systemctl enable xl2tpd
systemctl start xl2tpd

#-- firewall の解放
firewall-cmd --permanent --add-port={4500,500,1701}/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

#-- kernel パラメーター設定変更
cat <<_EOL_>> /etc/sysctl.conf
# for vpn
net.ipv4.ip_forward = 1
_EOL_

sysctl -p

・クライアントの設定

サーバアドレス: 該当サーバのIPv4アドレス
アカウント名: メールアドレス
パスワード: メールアドレスのパスワード
共有シークレット: PreSharedKey

macOS と Android と IOS での接続確認済み