読者です 読者をやめる 読者になる 読者になる

さくらのVPSでインターネットVPN(その2・サーバ設定編)

それでは前回(その1・解説編)の続きで設定していきましょう。

段取りは

  • L2TPサーバのインストール・設定
  • 通信を暗号化するためのIPSecのインストール・設定
  • IPSec動作確認
となります。

前提

私が使用しているさくらのVPSでのデフォルトOS、CentOS6.4での作業を前提としています。 VPNで設定するLANのIPアドレスは192.168.222.1〜192.168.222.32とします。 サーバのIPアドレスは192.168.222.1、クライアントに192.168.222.2〜32を割り当てます。 通信の暗号化は「共有暗号鍵」を用いて行います。 接続に際しては、CHAPによる認証を行います。

設定ファイルの中身については、記事作成時点で私自身が目的とする動作を達成できている内容となります。 自分で設定される際には、参考にとどめて、自己責任でよろしくお願いします。

L2TPインストール

# yum install xl2tpd

以上で、インストールは終わりです。

「/etc/xl2tpd/xl2tpd.conf」を編集します。 コメント行は省いてあります。

[lns default]
ip range = 192.168.222.2-192.168.222.32
local ip = 192.168.222.1
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

続いて、「/etc/ppp/options.xl2tpd」を編集します。

name xl2tpd
auth
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
crtscts
defaultroute
lock
mtu 1410
mru 1410
ms-dns  xxx.xxx.xxx.yyy
ms-dns  xxx.xxx.xxx.zzz
persist
proxyarp
noccp
idle 1800
debug
connect-delay 5000
ipcp-accept-local
ipcp-accept-remote
logfile /var/log/xl2tpd.log

このファイルの先頭行でつけた名前は、「/etc/ppp/chap-secrets」で記載することになります。 ms-dnsの指定は、私の場合はさくらのVPSの設定でわかっていたDNSサーバのIPアドレスを記載しました。

IPSecのインストール・Openswan

通信暗号化のための、IPSecの機能は「Openswan」で実現します。

# yum install openswan

インストールをしたら、設定ファイルの編集です。 「/etc/ipsec.conf」から。

version 2.0
config setup
protostack=netkey
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!192.168.222.0/24
oe=off
nhelpers=0
include /etc/ipsec.d/*.conf

L2TP接続に必要な内容を、「/etc/ipsec.d/l2tp-psk.conf」として作成します。 この設定ファイルは上記の"include /etc/ipsec.d/*.conf"で読み込まれます。

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    forceencaps=yes
    also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
    type=transport
    ike=3des-md5
    esp=3des-md5
    forceencaps=no
    authby=secret
    pfs=no
    rekey=no
    keyingtries=3
    left=%defaultroute
    leftnexthop=%defaultroute
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    auto=add
    dpddelay=5
    dpdtimeout=20
    dpdaction=clear

iOSデバイスでの接続のために、dpddelay,dpdtimeout,dpdactionという設定内容が必要ということです。

共有暗号鍵は「/etc/ipsec.d/default.secrets」の中に記載します。

 : PSK "secrets"

rootアカウント以外では見られないようにしておきます。 以下のコマンドで、group,othersからread,write,executeの権限をなくします。

 # chmod go-rwx /etc/ipsec.d/default.secrets

L2TP/IPSecのサーバ起動

以下のコマンドでサービスを開始し、再起動時にサーバ起動するように設定します。

 # service ipsec start
 # service xl2tpd start
 # chkconfig ipsec on
 # chkconfig xl2tpd on

Openswanの動作確認

IPSecが無事動作するか確認するために、下記のコマンドを実行します。

 # 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.32/K2.6.32-220.7.1.el6.x86_64 (netkey)
 Checking for IPsec support in kernel                            [OK]
  SAref kernel support                                           [N/A]
  NETKEY:  Testing for disabled ICMP send_redirects              [FAILED]
   Please disable /proc/sys/net/ipv4/conf/*/send_redirects
   or NETKEY will cause the sending of bogus ICMP redirects!
 NETKEY detected, testing for disabled ICMP accept_redirects     [FAILED]
   Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
   or NETKEY will accept bogus ICMP redirects!
 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]

FAILEDとなっている箇所の対応

 NETKEY:  Testing for disabled ICMP send_redirects              [FAILED]
NETKEY detected, testing for disabled ICMP accept_redirects     [FAILED]

この二行に対応します。メッセージのなかに「Please disabled」という指示がありますので、各デバイスごとにリダイレクトを無効にするべく、「/etc/sysctl.conf」で下記を追記しました。

net.ipv4.ip_forward = 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.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0

また、NATによるフォワーディングに必要なためip_forwardを有効にしています。 ファイル更新後に下記コマンドを実行して設定を有効にします。

# sysctl -p

では、あらためて、

# 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.32/K2.6.32-220.7.1.el6.x86_64 (netkey)
 Checking for IPsec support in kernel                            [OK]
  SAref kernel support                                           [N/A]
  NETKEY:  Testing for disabled ICMP send_redirects              [OK]
 NETKEY detected, testing for disabled ICMP accept_redirects     [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]

FAILEDがなくなりました。

CHAPのアカウント設定

「/etc/ppp/options.xl2tpd」で記載しておいたとおり、CHAPで認証を行いますので、「/etc/ppp/chap-secrets」に認証情報を登録します。「xl2tpd」というのが接続設定名です。

# Secrets for authentication using CHAP
# client      server   secret       IP addresses
"vpn-account" "xl2tpd" "vpn-secret" *

アカウント名は「vpn-account」、パスワードは「vpn-secret」というアカウントができました。 接続元は特に制限しないため、アスタリスクを設定しています。

接続してみる

盗聴防止

図の状態になれるはずです。

デバイスの側から設定しましょう。 詳しくは次回やってみようと思いますので、ひとまず、iOSデバイスからの接続の例。

VPN設定 iOS

  • 「サーバ」には、サーバのIPアドレス
  • 「アカウント」には、/etc/ppp/chap-secretsに設定したアカウント「vpn-account」
  • 「パスワード」には、/etc/ppp/chap-secretsに設定したパスワード「vpn-secret」
  • 「シークレット」には、/etc/ipsec.d/default.secretsに設定した共有鍵「secret」

を設定します。VPNをONにして接続できれば成功です。

OpenVPNで構築する超簡単VPN入門―Windows/Mac OS X/Linux対応

OpenVPNで構築する超簡単VPN入門―Windows/Mac OS X/Linux対応