DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

CentOS 6.4でPPTP VPNサーバーを構築

CentOS 6.4でPPTP VPNサーバーを構築したのでその際の設定を残しておきます。

訳あって、サーバはGlobalIPのみを持っていて、いかなるLANにも接続しません。
■環境の確認
CentOS release 6.4 (Final)


$ cat /etc/redhat-release
CentOS release 6.4 (Final)
GlobalIPのみ保持

eth0 Link encap:Ethernet HWaddr BC:30:5B:E2:8F:xx
inet addr:216.xxx.xxx.xxx Bcast:216.xxx.xxx.xxx Mask:255.255.255.240

eth1 Link encap:Ethernet HWaddr BC:30:5B:E2:8F:xx

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:628 (628.0 b) TX bytes:628 (628.0 b)

まずはppp関連のインストール。

# yum install ppp

# yum install pppd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
No package pppd available.
Error: Nothing to do
と言われるので最新版(2013年3月現在)のrpmでインストール

cd /usr/local/src
wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.el6.x86_64.rpm
rpm -Uvh pptpd-1.3.4-2.el6.x86_64.rpm
そうすると、/etc/pptpd.confというファイルが出来るのでこれを編集します。
ポイントは2つで「localip」と「remoteip」

localip : PPTPでの接続後のPPTP-VPNサーバー上(つまりこのサーバー)に指定したIPアドレスが割り振られる
remoteip : PPTP-VPNクライアントに割り当てられるIPアドレスのレンジ


localip 192.168.0.240
remoteip 192.168.0.241-245
今回はファイルの一番最後にこの二つを追加しました。

次に認証方式やDNS resolverに関する設定を /etc/ppp/options.pptpdにします。
基本的にはデフォルトのままで、ms-dnsの部分だけ自分の環境に合わせます。
ms-dns 8.8.8.8
のように。

/etc/ppp/chap-secretsを編集し、このVPNサーバーにアクセスできるユーザを作成します。
フォーマットは [username] [space] [server] [space] [password] [space][IP addresses]です。
タブなどは要りません。(入れると動かないですね)


vpnuser pptpd vpnuserpassword *
※後ほど記載しますが、iptablesでアクセス元を制御するので、chap-secretsの[IP addresses]は*にしてあります。

また、IPv4転送を有効にする必要があるので、/etc/sysctl.confを変更します。


less /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
一応SELinuxも確認しておきます。

# vi /etc/selinux/config
SELINUX=disabled
PPTPでは以下のポートとプロトコルを使用するので、それに見合った設定をします。
TCP/IP 1723番ポート
GRE/IP (プロトコル番号47番)

さらに今回は特定のサーバからのみ許可したいので、iptablesに以下のような設定を追加します。


-A INPUT -s 124.xx.xxx.xxx/32 -p tcp --dport 1723 -j ACCEPT
-A INPUT -s 124.xx.xxx.xxx/32 -p 47 -j ACCEPT
※124.xx.xxx.xxxからだけ許したいという状態の場合です

全体的なサービスの再起動・起動など


/etc/rc.d/init.d/iptables restart
service pptpd start
SELinux変えちゃったら再起動が必要です

起動に成功した場合以下のようにppp0がわりあたります。


# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.0.240 P-t-P:192.168.0.241 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1396 Metric:1
RX packets:5797 errors:0 dropped:0 overruns:0 frame:0
TX packets:3085 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:451930 (441.3 KiB) TX bytes:1417706 (1.3 MiB)
こうなればVPN側の設定はとりあえず完了です。
後は各クライアントから接続をします。

ログを使って接続等を確認したければ、
/etc/pptpd.confのdebugを有効にして


# TAG: debug
# Turns on (more) debugging to syslog
#
debug
less /etc/rsyslog.confに"debug"を追記

*.=debug;\
news.none;mail.none -/var/log/debug
また今回は必要ないですが、VPNからInternetに出たければNATの設定をします。

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
サブネットマスクは適当に設定してください。