出先から自宅のファイルサーバや開発用のWebサーバにアクセスしたい。これらのサーバはセキュリティのためプライベートIP(192.168.x.x)からしかアクセスできないように設定してある。これまではsshのポートフォワーディングを使ったり、一時的にファイアウォールでSource NATしたり、都度サーバ側のiptablesを特定のグローバルIPからの通信を許可するように変更したりして対応してきたが、いい加減面倒になったのでVPNを張れるようにする。
出先で使うクライアントはWindows XPなので、VPNのプロトコルとして標準で使えるPPTPを使用することにする。CentOS用のpptpdはSourceForgeで入手できる。
[root@ml115 ~]# wget http://poptop.sourceforge.net/yum/beta/packages/pptpd-1.3.4-1.rhel5.1.x86_64.rpm [root@ml115 ~]# rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm
また、PPPのパッケージも必要だ。こちらはyumでインストールできる。
[root@ml115 ~]# yum install ppp
まず/etc/pptpd.confを設定する。変更するのはとりあえずlocalipとremoteipだけでいい。localipはpptpサーバのアドレスで、remoteipはクライアントに付与するアドレス。ルーティングの問題を避けるため、localipはサーバのLAN側アドレスとして、remoteipも同じセグメントから重複しないように取るのが安全。
localip 192.168.0.254 remoteip 192.168.0.100
次に/etc/ppp/options.pptpdを設定する。nameがpptpdになっていることを確認し、ms-dnsにpptpでクライアント側に通知するDNSサーバを指定する。
name pptpd ms-dns 192.168.0.10 ms-dns 192.168.0.11
最後に/etc/ppp/chap-secretsにパスワードを設定する。1つ目がユーザ名、2つ目は先ほどpptpd.confで設定したnameと同じもの、3つ目がパスワード、4つ目は認証を許可するIPアドレスだが、インターネットから接続する場合はワイルドカード*になる。なお実際のパスワードはもっとセキュアなものを使う。
# client server secret IP addresses pptpuser pptpd pptppassword *
ここまででpptpdの設定は終了。service pptpd startでデーモンを開始し、必要であればchkconfig pptpd onで自動起動するようにする。
次に、PPTPサーバのiptablesでPPTPの通信と、PPTPで張られたVPN上の通信を許可する。すこしザルな気もするが、最低限必要な設定は以下のとおり。/etc/sysconfig/iptablesの*filterのところに追記して、service iptables restartで反映させる。
-A RH-Firewall-1-INPUT -i ppp0 -p tcp --dport 1723 -j ACCEPT -A RH-Firewall-1-INPUT -i ppp1 -j ACCEPT
1行目の1723/tcpはPPTPで使用するプロトコル。ppp0インターフェースは当サイトの環境ではBフレッツのPPPoEを使っているため、インターネット側インターフェースはppp0となる。2行目のppp1インターフェースはPPTPクライアントが接続されるインターフェース。ひとつ気になるのが何かの間違いでPPPoEがppp1としてつながった場合、この設定ではインターネットにサーバをフル公開してしまうなぁ。
ここまでの設定でCentOSサーバはPPTPサーバとして動作する。クライアントのWindows XP側の設定は以下のとおり。
- コントロールパネルのネットワーク接続をクリック。
- 新しい接続ウィザードを起動
- 職場のネットワークへ接続する(0)を選択して次へをクリック
- 仮想プライベートネットワーク接続(V)を選択して次へをクリック
- 会社名に適当な名前を入力して次へをクリック
- 最初の接続にダイアルしないを接続して次へをクリック(常時接続環境がないのであればダイヤル先を選択)
- ホスト名またはIPアドレスにPPTPサーバを入力して次へをクリック
- 自分のみを選択して次へをクリック
- 完了をクリックして終了
- 接続ダイアログボックスが出たら、ユーザ名とパスワードを入力して接続をクリック
なお、この手順のとおりでPPTPサーバを構築すると、セキュリティ上非常に脆弱になる。/etc/ppp/chap-secretsに記述したユーザ名とパスワードを総当り攻撃で破られると、プライベートネットワークにフルアクセスを許してしまうからだ。当面は、PPTPで繋ぎたいときにはsshでログインして、都度iptablesで許可をすることにしよう。あれ?これじゃ当初の目的を果たしていないかも。