CentOS5 VPNサーバ整理について、結局こんな感じになりました。SELinux, iptablesによるパケットフィルタについては考慮してません。それらを考慮した場合は、さらに設定が必要です。
サーバはグローバルIPを持っているとします。VPN用に192.168.5.0/24のネットワークを使うとします。
$ sudo yum install libpcap-devel ppp
$ wget http://www.openswan.org/download/openswan-2.6.37.tar.gz
$ tar xzf openswan-2.6.37.tar.gz
$ mkdir src
$ mv openswan-2.6.37 openswan-2.6.37.tar.gz src/
$ cd openswan-2.6.37
$ cat INSTALL
$ sudo make programs install
$ ls /usr/local/sbin/
$ cd ~/src
$ wget http://www.xelerance.com/wp-content/uploads/software/xl2tpd/xl2tpd-1.3.0.tar.gz
$ tar xzf xl2tpd-1.3.0.tar.gz
$ cd xl2tpd-1.3.0
$ less README.xl2tpd
$ sudo make install
$ ls /usr/local/sbin/
$ cd ~/src/xl2tpd-1.3.0
$ cat packaging/fedora/xl2tpd.init | \
sed 's%/usr/sbin/xl2tpd%/usr/local/sbin/xl2tpd%' - | \
sed 's%/usr/sbin/$SERVICE%/usr/local/sbin/$SERVICE%' - | \
sed 's%daemon $SERVICE%daemon /usr/local/sbin/$SERVICE%' - > packaging/fedora/xl2tpd
$ sudo cp packaging/fedora/xl2tpd /etc/init.d/
$ sudo chmod 755 /etc/init.d/xl2tpd
$ sudo vi /etc/ipsec.conf
$ sudo vi /etc/init.d/xl2tpd
$ sudo vi /etc/ipsec.conf
$ sudo vi /etc/ipsec.secrets
$ sudo cp -a /etc/ipsec.d/examples/l2tp-psk.conf /etc/ipsec.d/
$ sudo chmod 600 /etc/ipsec.secrets
$ sudo mkdir /etc/xl2tpd
$ sudo vi /etc/ipsec.d/l2tp-psk.conf
$ sudo vi /etc/xl2tpd/xl2tpd.conf
$ cat /etc/resolv.conf
$ sudo vi /etc/ppp/options.xl2tpd
$ sudo vi /etc/ppp/chap-secrets
$ sudo chmod 600 /etc/ppp/chap-secrets
$ sudo touch /var/log/xl2tpd.log
$ sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j MASQUERADE
$ sudo /sbin/iptables -t nat -L
$ sudo vi /etc/sysctl.conf
$ sudo /sbin/sysctl -p
いくつかコメントが残っていたりしますが、ファイルはこんな感じ。
: PSK "abcd1234"
$ cat /etc/ipsec.d/l2tp-psk.conf
conn L2TP-PSK-NAT
# rightsubnet=vhost:%priv
rightsubnet=0.0.0.0/0
forceencaps=yes
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=%defaultroute
# left=192.168.5.10
# leftnexthop=%defaultroute
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
# dpddelay=5
# dpdtimeout=30
# dpdaction=clear
$ cat /etc/ipsec.conf |grep -v "#"
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,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
oe=off
protostack=netkey
include /etc/ipsec.d/*.conf
$ cat /etc/xl2tpd/xl2tpd.conf
[global]
auth file = /etc/ppp/chap-secrets
[lns default]
ip range = 192.168.5.128-192.168.5.254
local ip = 192.168.5.1
require chap = yes
refuse pap = yes
require authentication = yes
name = VPNServer
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
$ cat /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns VPNサーバが参照しているDNS1のIPアドレス
ms-dns VPNサーバが参照しているDNS2のIPアドレス
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
connect-delay 5000
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
logfile /var/log/xl2tpd.log
$ sudo cat /etc/ppp/chap-secrets
"username" * "abc123" *
$ sudo cat /etc/sysctl.conf
#略
net.ipv4.ip_forward = 1
#略
net.core.xfrm_larval_drop = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
Android端末からVPNサーバへ接続するところまでは確認できました。簡単と言えば簡単ですけど、それなりに設定には時間がかかりますね…