Home > 3月 29th, 2008

2008.03.29

PPTPでVPN接続

自宅サーバにPPTPdを構築し
外部から自宅PCにVPN接続したくなったのでその構築記。

1.pptpdのインストール
2.設定ファイルの編集
3.サービス起動

1.pptpdのインストール
PPTPdにはOpenSourceのPopTopを使用。
まずはそのインストールから。

地道にrpmをダウンロードしてインストールしてもいいんですが
やはりここは美しくyumで一括インストール。

安定版
http://poptop.sourceforge.net/yum/stable/
ベータ版
http://poptop.sourceforge.net/yum/beta/

上記サイトから該当する構成を選択してリポジトリ登録用のrpmを取得。
今回は安定版を選択し、僕の環境ではFedora8のi386だったので
http://poptop.sourceforge.net/yum/stable/fc8/i386/pptp-release-current.fc8.noarch.rpm
を使用しました。
自分の構成がない場合は
http://poptop.sourceforge.net/yum/stable/packages/
からおとなしく必要なrpmをダウンロードしてインストールしてください。その説明は割愛。

以下インストール

# rpm -Uvh
 http://poptop.sourceforge.net/yum/stable/fc8/i386/pptp-release-current.fc8.noarch.rpm
# yum --enablerepo=poptop-stable install pptpd

インストール完了。

2.設定ファイルの編集
次は設定ファイルの編集です。
編集が必要なファイルは以下の2つです。
/etc/pptpd.conf
/etc/ppp/chap-secrets

設定サイトを参考にしていると
/etc/ppp/options.pptpd
も編集しろと書かれていたりするんですが、これはデフォルトで動作しましたので割愛。

まずはメインのpptpd.confから

# vi /etc/pptpd.conf

この設定ファイルにPPTPd用のIPアドレスとVPN接続してきたクライアント用のIPアドレスを記載します。
PPTPはPPPを利用した接続方式で、PPPはコンピュータを1対1で接続するプロトコルです。
それぞれのコンピュータの識別にIPアドレスを利用するため、それぞれのIPの設定が必要となります。

ファイルの最後に下記を追加。

localip 192.168.0.15
remoteip 192.168.0.151-160

この構成では、PPTPdのサーバとしては192.168.0.15のIPを使用し
クライアントには192.168.0.151から192.168.0.160の空きIPが割り当てられます。
特別必要がない限りはネットワークアドレスの空きを割り当てれば大丈夫です。

続いてchap-secrets。

# vi /etc/ppp/chap-secrets

この設定ファイルはPPTP接続のユーザ認証設定を記載します。

ユーザ名 pptpd パスワード *

こんな感じです。
/etc/ppp/options.pptpdでサーバ名などを真面目に修正される場合は
pptpdの部分をサーバ名に変更する必要があります。
最後の「*」の部分はIPアドレスの設定ですが、あまり気にせずお約束のように「*」を入れておきましょう。
あとSambaのユーザ認証なども使えるようです。
セキュリティ的にそっちのがよければお調べください

これでPPTPdの設定は完了です。

3.サービス起動
最後にサービスをスタート。

# /etc/init.d/pptpd start

さて、ここまではただのインストールで寝ててもできる設定ですね(実際寝てました)
でもこれで終わらないからネットワーク屋さんなのです。
続いてネットワークの設定です。

1.ルータの設定
2.ファイアウォールのINPUTの許可
3.IP packetのフォワード設定
4.ファイアウォールのFORWARDの許可

1.ルータの設定
まずはルータの設定。
PPTPで使用するTCPの1723番ポートを自宅サーバへフォワードするように設定。
これはルータのマニュアル参照。

2.ファイアウォールのINPUTの許可
次に受信したパケットの受け付けを許可します。
iptablesのファイルを編集(IPv6の場合はip6tables)

# vi /etc/sysconfig/iptables

以下の許可を追加。

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1723 -j ACCEPT

RH-Firewall-1-INPUTはFedoraにデフォで設定されてる定義名みたいなものです。
環境が違う場合は各自書き換えを。
iptablesの設定変更を反映。

# /etc/init.d/iptables restart

ここまでの設定でPPTP接続ができるはずです。
WindowsからVPN接続の設定をして試してみてください。
PPTPdサーバに設定したIPからpingが返れば成功です。

3.IP packetのフォワード設定
サーバにデータを置いていれば上記まででいいのですが
残念ながら僕のデータはWindowsマシンのほう。
ということでサーバでパケットの転送を行わなければいけません。

そのためのカーネルパラメータにパケットフォワードの許可の設定。

# vi /etc/sysctl.conf

以下の項目を変更し転送許可を設定。

net.ipv4.ip_forward = 0
↓
net.ipv4.ip_forward = 1

設定の変更を有効に。

# sysctl -p /etc/sysctl.conf

4.ファイアウォールのFORWARDの許可
最後に有効にしたパケットフォワードをファイアウォールで許可。

# vi /etc/sysconfig/iptables

-A FORWARD -j REJECT –reject-with icmp-host-prohibited
より前に以下の設定を追加。

-A FORWARD -p icmp --icmp-type any -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -m state --state NEW -m tcp -p tcp --dport 137:139 -j ACCEPT
-A FORWARD -m state --state NEW -m udp -p udp --dport 137:139 -j ACCEPT
-A FORWARD -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A FORWARD -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT

ping確認のためのicmpの許可と
ファイル共有を行うために137-139と445を許可しています。

iptablesの設定変更を反映。

# /etc/init.d/iptables restart

以上で設定完了です!
これでいつでもどこからでもWindowsについてるVPN接続で自宅サーバに接続し
自宅PCのファイルにアクセス可能になりました!

余談。

このファイアウォールのフォワードの設定はファイル共有だけっつーけっこーシビアなものなので
VPN接続してる状態でウェブ見たりとかメール見たりとかメッセつないだりとかできない。
ということで

-A FORWARD -i ppp0 -j ACCEPT
-A FORWARD -o ppp0 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

こんな風に書き換えてしまうとVPN接続は全てスルーになります。
まぁ、こっちのが楽でいいかな…(ppp0はVPN接続時のインタフェース名です)