CentOS 6.4でPPTP VPNサーバーを構築
CentOS 6.4でPPTP VPNサーバーを構築したのでその際の設定を残しておきます。
訳あって、サーバはGlobalIPのみを持っていて、いかなるLANにも接続しません。
■環境の確認
CentOS release 6.4 (Final)
GlobalIPのみ保持
$ cat /etc/redhat-release
CentOS release 6.4 (Final)
まずはppp関連のインストール。
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.240eth1 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)
# yum install ppp
と言われるので最新版(2013年3月現在)のrpmでインストール
# yum install pppd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
No package pppd available.
Error: Nothing to do
そうすると、/etc/pptpd.confというファイルが出来るのでこれを編集します。
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
ポイントは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]です。
タブなどは要りません。(入れると動かないですね)
※後ほど記載しますが、iptablesでアクセス元を制御するので、chap-secretsの[IP addresses]は*にしてあります。
vpnuser pptpd vpnuserpassword *
また、IPv4転送を有効にする必要があるので、/etc/sysctl.confを変更します。
一応SELinuxも確認しておきます。
less /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
PPTPでは以下のポートとプロトコルを使用するので、それに見合った設定をします。
# vi /etc/selinux/config
SELINUX=disabled
・TCP/IP 1723番ポート
・GRE/IP (プロトコル番号47番)
さらに今回は特定のサーバからのみ許可したいので、iptablesに以下のような設定を追加します。
※124.xx.xxx.xxxからだけ許したいという状態の場合です
-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
全体的なサービスの再起動・起動など
※SELinux変えちゃったら再起動が必要です
/etc/rc.d/init.d/iptables restart
service pptpd start
起動に成功した場合以下のようにppp0がわりあたります。
こうなればVPN側の設定はとりあえず完了です。
# 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)
後は各クライアントから接続をします。
ログを使って接続等を確認したければ、
/etc/pptpd.confのdebugを有効にして
less /etc/rsyslog.confに"debug"を追記
# TAG: debug
# Turns on (more) debugging to syslog
#
debug
また今回は必要ないですが、VPNからInternetに出たければNATの設定をします。
*.=debug;\
news.none;mail.none -/var/log/debug
※サブネットマスクは適当に設定してください。
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE