孫の写真をよこせとな。そうですね、今環境構築しているのでちょっとまってね、と。
俺自身もiPhoneから接続したいと思っているのだ。
xl2tpdとipsecでVPN環境を構築する。
過去の自分の記事を見ながら設定するわけだが、今回は前提として「まっさら」があるので、多分さらっとはできないだろう。
そう、一番大切な設定ファイルが消えているので、ま~た手探りでやってかなきゃならないんだよな。
接続してくるクライアントは Windows だけでなく iOS もあるので、特別に入れている設定もある。
作業の前にちょっとだけ。
- 関係するパッケージは xl2tpd, openswan(ipsec), ppp の3つ。それぞれ、/etc/xl2tpd, /etc/ipsec, /etc/ppp あたりにファイルがある。
- ipsecを設定したら、まずはこれが正しく動くことを確認。動かすためにはルーティングなどにも少々手を入れる必要がある。
- ここで書いている設定値については、一つ一つ吟味したものではないので、矛盾したものもあるかもしれないので、気になる場合にはよく調べてみたほうがいい。
■インストール
$ sudo apt-get install xl2tpd openswan
セットアップ中に質問をされる。
「このホストに対して X.509 証明書を利用しますか?」
→ ちょっと物怖じして「いいえ」を選択。
後で設定し直すときには
$ sudo dpkg-reconfigure openswan
とすればいいらしい。
インストールしてみると /etc/ppp なんてのができあがっていて、そこに空っぽのファイルがあったりすることがわかる。
■設定
やること多すぎ。
とりあえず、ポートの解放。
500/udp 4500/udp 1701/udp
それと、espというプロトコル(サービス名ではない)を使うがgufwでの設定方法がわからなかったので、以下を実行。
$ sudo ufw allow proto esp from any
VPNで接続した後、別のPCに接続(リモートデスクトップとか、共有ディレクトリとか)したい場合、ufwでパケットの転送を許可しておく必要がある。2013/07/04追記
/etc/default/ufw
#DEFAULT_FORWARD_POLICY="DROP" DEFAULT_FORWARD_POLICY="ACCEPT"
$ sudo ufw disable $ sudo ufw enable
以降、いろんなファイルを編集していく。
/etc/ipsec.conf
# /etc/ipsec.conf - Openswan IPsec configuration file # This file: /usr/share/doc/openswan/ipsec.conf-sample # # Manual: ipsec.conf.5 version 2.0 # conforms to second version of ipsec.conf specification # basic configuration config setup # Do not set debug options to debug configuration issues! # plutodebug / klipsdebug = "all", "none" or a combation from below: # "raw crypt parsing emitting control klips pfkey natt x509 dpd private" # eg: # plutodebug="control parsing" # Again: only enable plutodebug or klipsdebug when asked by a developer # # enable to get logs per-peer # plutoopts="--perpeerlog" # # Enable core dumps (might require system changes, like ulimit -C) # This is required for abrtd to work properly # Note: incorrect SElinux policies might prevent pluto writing the core dumpdir=/var/run/pluto/ # # NAT-TRAVERSAL support, see README.NAT-Traversal nat_traversal=yes # exclude networks used on server side by adding %v4:!a.b.c.0/24 # It seems that T-Mobile in the US and Rogers/Fido in Canada are # using 25/8 as "private" address space on their 3G network. # This range has not been announced via BGP (at least upto 2010-12-21) #virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10 virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10,%v4:!172.16.0.0/16 # OE is now off by default. Uncomment and change to on, to enable. oe=off # which IPsec stack to use. auto will try netkey, then klips then mast protostack=auto # Use this to log to a file, or disable logging on embedded systems (like openwrt) #plutostderrlog=/dev/null # 独自設定を読み込む(0カラムから書き始めること) include /etc/ipsec.d/*.conf # Add connections here # sample VPN connection # for more examples, see /etc/ipsec.d/examples/ #conn sample # # Left security gateway, subnet behind it, nexthop toward right. # left=10.0.0.1 # leftsubnet=172.16.0.0/24 # leftnexthop=10.22.33.44 # # Right security gateway, subnet behind it, nexthop toward left. # right=10.12.12.1 # rightsubnet=192.168.0.0/24 # rightnexthop=10.101.102.103 # # To authorize this connection, but not actually start it, # # at startup, uncomment this. # #auto=add
新しくファイルを作る。
/etc/ipsec.d/l2tp-psk.conf
conn L2TP-PSK-NAT rightsubnet=vhost:%priv also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport left=172.16.nnn.nnn # leftnexthop=172.16.nnn.1 leftnexthop=%direct leftprotoport=17/1701 right=%any rightprotoport=17/%any # iOSが削除通知をしてこないことへの対応 dpddelay=10 dpdtimeout=30 dpdaction=clear
このキーは意味不明な文字列でながーいのを作っておこう。X.509を使わないのだから、せめて。
これはrootしか読むこともできない秘密のファイル。
/etc/ipsec.secrets
# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication. See ipsec_pluto(8) manpage, and HTML documentation.
# RSA private key for this host, authenticating it to any other host
# which knows the public part. Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".
# this file is managed with debconf and will contain the automatically created RSA keys
include /var/lib/openswan/ipsec.secrets.inc
172.16.nnn.nnn %any: PSK "xxxxxx...."
次はxl2tpd。サンプルでは設定値の右に ; コメント が書かれているんだけど、実際にはこれを削除しておかないとうまく動かないみたいなので、コメントを取っ払ってスッキリさせる。(man xl2tpd.conf)
/etc/xl2tpd/xl2tpd.conf
[global]
auth file = /etc/xl2tpd/l2tp-secrets
[lns default]
ip range = 172.16.nnn.90-172.16.nnn.99 ←範囲は決めているけど、ipsec.secretsで指定
assign ip = yes
local ip = 172.16.nnn.nnn
length bit = yes
refuse pap = yes
refuse chap = yes
require authentication = yes
hostname = hogeserver
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.lns
次は接続ユーザーの定義。これにも意味のないながーいユーザー名とパスワードを設定し、かつ、IPアドレスを設定しておく。(/usr/share/doc/ppp/README.STATIC-IP参照)
指定は、ユーザー名、サーバー名、パスフレーズ(空白を含めることができるパスワード)、割り当てるIPアドレス、となっている。
/etc/xl2tpd/l2tp-secrets
# Secrets for authenticating l2tp tunnels
# us them secret
# * marko blah2
# zeus marko blah
# * * interop
# for hogeuser iPhone
xxxxxxxxxxxxxxxxxx hogeserver "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn0
# for hogeuser iPad
xxxxxxxxxxxxxxxxxx hogeserver "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn1
# for hogewife iPhone
xxxxxxxxxxxxxxxxxx hogeserver "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn2
# for mother Windows
xxxxxxxxxxxxxxxxxx hogeserver "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn3
# for brother Windows
xxxxxxxxxxxxxxxxxx hogeserver "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn4
意味のない文字や数字の羅列、かつ、ながーいのにすることで、VPNでおかしな人が入ってくる危険を減らそう、というのが狙い。中に入られちゃったら、パスワードで運用ができるサービスもあるので。
端末を落っことしちゃったりしたら、ここからユーザーを削除(コメント化)する。でも、端末側を調べようとしてもユーザーくらいしか見えないからまず大丈夫かなーって思ったり。
今回の設定を適用すると、l2tpで接続するときにpppが使われる。
そこで、/etc/ppp 配下にある chap-secrets を l2tp-secrets のシンボリックリンクに置き換えてしまう。
※今回はこれがラスボス・・・このファイルが使われることに気付かなかった。
$ sudo mv /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bk $ sudo ln -s /etc/xl2tpd/l2tp-secrets /etc/ppp/chap-secrets
PPPに関するオプションも決めておく。(man pppd)
/etc/ppp/options.l2tpd.lns
require-mschap-v2
ipcp-accept-local
ipcp-accept-remote
ms-dns 172.16.nnn.nnn
ms-wins 172.16.nnn.nnn
#noccp
auth
crtscts
idle 1800
#nodefaultroute
#debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.l2tp-ipsec.log
設定を反映させる。
$ sudo service xl2tpd restart $ sudo service ipsec restart
ipsecを動作させるために以下を追加。
/etc/sysctl.conf
# ipsecのために
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
変更を反映させる。
$ sudo sysctl -p
ipsecの動作状況を確認する。
$ sudo ipsec verify Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.37/K3.5.0-31-generic (netkey) Checking for IPsec support in kernel [OK] SAref kernel support [N/A] NETKEY: Testing XFRM related proc values [OK] [OK] [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Checking for 'ip' command [OK] Checking /bin/sh is not /bin/dash [WARNING] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED]
このじょうたいであればOKらしい。
さらに
$ sudo ipsec auto --status
→ 特にワーニングなどもなく情報が表示された。
■動作確認
WindowsやiPhoneからVPN接続をしてみる。
ログは
/var/log/auth.log
/var/log/syslog
などに出力される。
■その他
VPNで接続してきたクライアントに DNSサフィックス を付けようと色々挑戦したが、結果としてつけることはできなかった。
サーバーにアクセスする際に hogeserver ではアクセスができず、hogeserver.hogeddns.jp としなければならない。
やったこと。
/etc/ppp/options.l2tpd.lns
require-mschap-v2
ipcp-accept-local
ipcp-accept-remote
ms-dns 172.16.nnn.nnn
ms-wins 172.16.nnn.nnn
#noccp
auth
crtscts
idle 1800
#nodefaultroute
#debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.l2tp-ipsec.log
domain hogeserver.hogeddns.jp
/etc/xl2tpd/l2tp-secrets
# Secrets for authenticating l2tp tunnels # us them secret # * marko blah2 # zeus marko blah # * * interop # for hogeuser iPhone xxxxxxxxxxxxxxxxxx hogeserver.hogeserver.hogeddns.jp "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn0/16 # for hogeuser iPad xxxxxxxxxxxxxxxxxx hogeserver.hogeserver.hogeddns.jp "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn1/16 # for hogewife iPhone xxxxxxxxxxxxxxxxxx hogeserver.hogeserver.hogeddns.jp "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn2/16 # for mother Windows xxxxxxxxxxxxxxxxxx hogeserver.hogeserver.hogeddns.jp "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn3/16 # for brother Windows xxxxxxxxxxxxxxxxxx hogeserver.hogeserver.hogeddns.jp "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 172.16.nnn.nn4/16
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他