自宅サーバに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接続時のインタフェース名です)