DebianでL2TP/IPSecなVPNサーバ

なんかネタ提供がありましたので、
早速やってみました。

OS・・・Debian squeeze 6.0.5
Kernel・・・2.6.32-5-amd64
IPSec・・・openswan
L2TP・・・xl2pd

さっくり

# apt-get install openswan xl2tpd lsof

必要なインストールはこれだけなんですが、
設定ファイルがあちこちにあり統一感ナシです。。。。

1)L2TPの設定

基本設定
L2TP/IPSecサーバ・・・192.168.100.2
クライアント割り当て・・・192.168.100.101〜120
接続名・・・l2tp
L2TPパスワード・・・/etc/ppp/chap-secrets
オプション設定・・・/etc/ppp/options.l2tpd.lns

# vi /etc/xl2tpd/xl2tpd.conf

[global]
auth file = /etc/ppp/chap-secrets

[lns default]
ip range = 192.168.100.100-192.168.100.120
local ip = 192.168.100.2
length bit = yes
name = l2tp
pppoptfile = /etc/ppp/options.l2tpd.lns

接続時のユーザ名とパスワードの設定
ユーザ名・・・hogename
パスワード・・・hogehoge

# vi /etc/ppp/chap-secrests

# Secrets for authentication using CHAP
# client        server  secret      IP addresses
hogename        l2tp    "hagehoge"  *

serverに「*」を指定してもOKです。

クライアントに通知するDNSサーバ
プライマリ・・・192.168.100.1
セカンダリ・・・8.8.8.8
ログファイル・・・/var/log/xl2tpd.log

詳細設定

# vi /etc/ppp/options.l2tpd.lns
ipcp-accept-local
ipcp-accept-remote
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
noccp
nodefaultroute
auth
crtscts
idle 1800
debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.log
mtu 1420
mru 1420
ms-dns 192.168.100.1
ms-dns 8.8.8.8

MTU、MRUはもっと大きくしてもいいかも。

2)IPSecの設定

基本設定

# vi /etc/ipsec.conf

version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey	
nhelpers=0

include /etc/ipsec.d/*.conf

protostack=autoからnetkeyへ変更する程度。。。

事前共通キー・・・hoge-psk-key

# vi /etc/ipsec.secrets

%defaultroute %any : PSK "hoge-psk-key"

IPSecとL2TPの設定

# vi /etc/ipsec.d/l2tp-psk.conf
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
forceencaps=yes
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=%defaultroute
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

Left=L2TP/IPSecサーバ側
Right=クライアント側
forceencaps=yesだとWindowsから繋がらない場合がある?
「no」にする。

ipsecの設定確認(現時点ではエラーする)

# ipsec verify

Checking for RSA private key (/etc/ipsec.secrets) [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [FAILED]
Cannot execute command "lsof -i UDP:500": そのようなファイルやディレクトリはありません
Pluto listening for NAT-T on udp 4500 [FAILED]
Cannot execute command "lsof -i UDP:4500": そのようなファイルやディレクトリは ありません
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]

いくつかFAILEDが出ます。

エラーするのでカーネルパラメータを設定します。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0

# sysctl -p

再起動しなくてもOK。

3)各サービスの起動

Syslogも再起動しておきます。

# /etc/init.d/rsyslog restart
# /etc/init.d/ipsec restart
# /etc/init.d/xl2tpd restart

これで、起動したはず。。。

確認

# netstat -lanput |grep pluto
udp        0      0 127.0.0.1:500           0.0.0.0:*                           9189/pluto      
udp        0      0 192.168.100.2:500       0.0.0.0:*                           9189/pluto         
udp        0      0 127.0.0.1:4500          0.0.0.0:*                           9189/pluto      
udp        0      0 192.168.100.2:4500      0.0.0.0:*                           9189/pluto      

# netstat -lanput |grep xl2tpd
udp        0      0 0.0.0.0:1701            0.0.0.0:*                           9232/xl2tpd 

xl2tpdの設定ミスにより上がらない場合は

# /usr/sbin/xl2tpd -D

とすれば、どこでエラーしているのかがわかります。
(僕はハマりました・・・)

ログを見る

# tail -f /var/log/auth.log
IPsec SA established transport mode・・・・

このようなログが出ればIPSecはOK。

# tail -f /var/log/xl2tpd.log
found interface eth0 for proxy arp
local  IP address 192.168.100.2
remote IP address 192.168.100.101
Script /etc/ppp/ip-up started (pid 896)
Script /etc/ppp/ip-up finished (pid 896), status = 0x0

このような感じで、クライアントから接続すると、見えると思います。

Android端末から接続すると

Unsupported protocol 'Compression Control Protocol' (0x80fd) received

と言われますが、気になる人は、

# vi /etc/ppp/options.l2tpd.lns
# noccp

とすれば吐かなくなります。

あとは、自動起動に設定しておきます。

# update-rc.d ipsec defaults
# update-rc.d xl2ptd defaults

僕の環境だけか、このままでは再起動しても
ipsecが上がらなかったので

# update-rc.d ipsec remove
# update-rc.d ipsec defaults

このように一度、削除しました・・・

参考URL
http://network.station.ez-net.jp/server/remote/Linux/l2tp.asp
http://wiki.princo.org/?Android%A5%B9%A5%DE%A1%BC%A5%C8%A5%D5%A5%A9%A5%F3%A4%AB%A4%E9Linux%A5%B5%A1%BC%A5%D0%A4%CBVPN%C0%DC%C2%B3%A4%B9%A4%EB

[tegaki]難しいの。。。[/tegaki]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Enter code * Time limit is exhausted. Please reload CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください