CentOS5 VPNサーバ構築

CentOS5 VPNサーバ整理について、結局こんな感じになりました。SELinux, iptablesによるパケットフィルタについては考慮してません。それらを考慮した場合は、さらに設定が必要です。

サーバはグローバルIPを持っているとします。VPN用に192.168.5.0/24のネットワークを使うとします。

$ sudo yum install make gcc gmp-devel bison flex
$ 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

いくつかコメントが残っていたりしますが、ファイルはこんな感じ。

$ sudo cat /etc/ipsec.secrets 
: 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サーバへ接続するところまでは確認できました。簡単と言えば簡単ですけど、それなりに設定には時間がかかりますね…

同じタグの記事: CentOS
同じタグの記事: VPN
同じカテゴリの記事: Linux
関連書籍: CentOS