VPNサーバの構築

さくらVPSでやりたいことの1つがVPNサーバの構築だった*1。以下を参考に構築を試みる。

1. pppの確認

$ rpm -q ppp
ppp-2.4.4-2.el5

すでに ppp-2.4.4 がインストール済みのもよう。

2. pptpdのインストール

2.1 pptpdのソース取得

以下からソースを取得する。

2.2 pptpd.spec の修正

rpmのSPECファイル(pptpd-1.3.4/pptpd.spec)中のpppのバージョンが 2.4.3 になっているので、修正が必要らしい。

まず、ソースを展開する。

$ tar xvfz pptpd-1.3.4.tar.gz

pptpd-1.3.4/pptpd.spec の以下の部分(57行目)を修正する。

57c57
< (echo '#undef VERSION'; echo '#define VERSION "2.4.3"') >> plugins/patchlevel.h
---
> (echo '#undef VERSION'; echo '#define VERSION "2.4.4"') >> plugins/patchlevel.h

修正したソースを pptpd-1.3.4-1.tar.gz としてまとめる。

$ tar cvfz pptpd-1.3.4-1.tar.gz pptpd-1.3.4
2.3 rpmパッケージ作成
$ sudo rpmbuild -ta pptpd-1.3.4-1.tar.gz

rootで作業すると誤ってインストールされる危険があるらしいが、今回はどうせインストールするので気にしないことにする。

2.4 rpmパッケージのインストール
$ sudo rpm -ivh /usr/src/redhat/RPMS/x86_64/pptpd-1.3.4-1.x86_64.rpm

3. pptpdおよびpppの設定

3.1 /etc/pptpd.conf

localipとremoteipを有効にする。

96,97c96,97
< #localip 192.168.0.1
< #remoteip 192.168.0.234-238,192.168.0.245
---
> localip 192.168.0.1
> remoteip 192.168.0.101-105

とりあえず、最大5接続受け付けるようにした。

3.2 /etc/ppp/options.pptpd

DNSの設定だけ変更すればOK。Google Public DNSを指定した。

66,67c66,67
< #ms-dns 10.0.0.1
< #ms-dns 10.0.0.2
---
> ms-dns 8.8.8.8
> ms-dns 8.8.4.4
3.3 /etc/ppp/chap-secrets

以下の1行を追加。

koba * password *

passwordの部分にはVPN接続の際のパスワードを設定する。

4. iptablesとsysctlの設定

4.1 iptables

VPN接続をグローバルIPに向けてNATする。対象となるアドレスは、/etc/pptpd.conf で指定したものと一致させる。

$ sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptablesの設定を保存する。

$ sudo /etc/rc.d/init.d/iptables save
4.1 sysctl

/etc/sysctl.conf を修正して net.ipv4.ip_forward を有効にする。

7c7
< net.ipv4.ip_forward = 0
---
> net.ipv4.ip_forward = 1

設定した内容を反映する。

$ sudo /sbin/sysctl -p

5. pptpdの起動

$ sudo /etc/rc.d/init.d/pptpd start

pptpdを起動して、VPN接続が動作するか確認する。

6. OS起動時にpptpdが起動するようにする

$ sudo /sbin/chkconfig pptpd on

追記(2012-01-07)

中国のホテルからだとVPNに繋がっても通信できない場合があった。通信できる場合もあるので原因不明。どこか設定が間違ってるかな...

*1:中国出張の機会が多いので...