CentOS6でPPTPを使ってVPNへ接続しよう

CentOS6でPPTPを使ってVPNへ接続する方法について説明します。必要なパッケージは ppp pptp pptp-setup です。

$ sudo yum install ppp pptp pptp-setup

VPN接続先が vpn.example.jp だとして、アカウント vpnuser、パスワード vpnpass としてあるとします。

$ sudo pptpsetup --create "vpn" \
 --server "vpn.example.jp" \
 --username "vpnuser" \
 --password "vpnpass" \
 --encrypt

下記に設定ファイルが作成されます。内容がおかしいようなら手動で修正しましょう。

$ cat /etc/ppp/peers/vpn
$ cat /etc/ppp/chap-secrets 

まずはこれで接続をしてみましょう。接続ができない場合はエラーから原因を調べて解決をします。

$ sudo pppd call gvpn updetach

VPN内のマシンへアクセスするには経路の追加が必要なのでスクリプトを用意します。接続先のVPNが192.168.1.0のネットワークを提供しているとします。

$ cat ~/bin/vpn-up.sh 
#!/bin/sh
pppd call gvpn updetach
ip=`/sbin/ifconfig ppp0|grep "P-t-P"|awk '{print $3}'|sed 's/P-t-P://' -`
route add -net 192.168.1.0 netmask 255.255.255.0 gw ${ip} dev ppp0

もし、VPN内のDNSが解決するexample.jpのホスト名がある場合は、example.jpのVPN内のDNSを参照するようにする必要があります。example.jpのVPN内のDNSが192.168.1.0のネットワーク上にある場合は経路の追加は必要ありません。たとえば、192.168.100.0のネットワーク上にある場合は経路の追加が必要です。その場合は次のようなスクリプトになります。

#!/bin/sh
pppd call gvpn updetach
ip=`/sbin/ifconfig ppp0|grep "P-t-P"|awk '{print $3}'|sed 's/P-t-P://' -`
route add -net 192.168.1.0 netmask 255.255.255.0 gw ${ip} dev ppp0
route add -net 192.168.100.0 netmask 255.255.255.224 gw ${ip} dev ppp0

スクリプトが用意できたら、実行してみましょう。接続ができて経路も登録できたら ping や ssh などで接続を確認しましょう。ここでは、192.168.1.10というマシンへpingやSSHができるように設定してあるという前提でコマンドを実行しています。

$ sudo vpn-up.sh
$ ping 192.168.1.10
$ ssh 192.168.1.10

停止をするスクリプトは次のように作成できます。pppdのところは、/usr/sbin/pppd とコマンドを打って起動するか、普通にpppdで起動するかで変わります。

$ cat ~/bin/vpn-down.sh 
#!/bin/sh
PPTPNAME="vpn"
pkill -f "^pppd call ${PPTPNAME}\s"

example.jpドメインのVPN内部のDNSを参照するには dnsmasq を使うのが簡単です。dnsmasq のインストールと設定をするには次のようにします。

$ sudo yum install dnsmasq

dnsmasqの設定は /etc/dnsmasq.conf に記載します。上位DNSの設定は/etc/dnsmasq.resolv.confに記載するので、それをresolv-fileで指定します。example.jpのVPN内部DNSサーバが192.168.100.2だとして、ここではserver=で指定します。

$ cat /etc/dnsmasq.conf
strict-order
resolv-file=/etc/dnsmasq.resolv.conf
server=/1.168.192.in-addr.arpa/10.10.10.8
server=/example.jp/192.168.100.2

dnsmasqは/etc/hostsに記載されている情報から名前解決をしてくれます。

$ cat /etc/resolv.conf 
nameserver 127.0.0.1

上位のDNSにたとえばGoogleのDNSを指定するのであれば下記のようにします。

$ cat /etc/dnsmasq.resolv.conf 
nameserver 8.8.8.8

後は、chkconfigで自動起動するように設定をし、dnsmasqを起動します。

$ sudo chkconfig dnsmasq on
$ sudo service dnsmasq restart

ここで、KVMを稼働しているマシンではKVMがdnsmasqを使っているためdnsmasqの再起動ができません。とりあえず今回試したマシンでは、不要なので次のように仮想マシン用ネットブリッジvirbr0を強制破棄しました。

$ sudo virsh net-destroy default

また、次のように自動登録設定を無効化します。

$ sudo virsh net-autostart default --disable

こうしなくてもマシンを再起動したり、virshでnetを再起動すればいいだけなのかもしれませんが、今回はそちらの確認はしませんでした。

VPNやCentOSについて基本を知らない場合は書籍などで知識を得てから作業をした方が良いでしょう。たとえばAmazonでは下記のような書籍があるようです。自分では購入していないので下記のものを推薦しているわけではありません。自分にとってわかりやすそうなものを手に入れるようにしてください。

同じタグの記事: CentOS
同じタグの記事: CentOS6
同じタグの記事: VPN
同じカテゴリの記事: Linux
関連書籍: CentOS