さくら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
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
6. OS起動時にpptpdが起動するようにする
$ sudo /sbin/chkconfig pptpd on
追記(2012-01-07)
中国のホテルからだとVPNに繋がっても通信できない場合があった。通信できる場合もあるので原因不明。どこか設定が間違ってるかな...
*1:中国出張の機会が多いので...