Home > 3月, 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接続時のインタフェース名です)

2008.03.05

英語localeで日本語入力

Linuxを使うとき、localeが日本語なのが許せない。
でもインストールするときは日本語を使いたい。
そんなわけでインストールが終わってからまずは英語に設定を変更。

設定ファイルを開く。

# vi /etc/sysconfig/i18n

そして内容編集。

LANG="ja_JP.UTF-8"

こうなっているのを

LANG="ja_JP.UTF-8:en_US.UTF-8"

こう変更。

さて、これでメッセージなどは英語で表示してくれるようになるのですが
X Windowを使った時に日本語入力ができなくなってたのだ。

なので次はその設定変更。
まずは設定画面を開く。
[System] -> [Preference] -> [Personal] -> [Input Method]
[IM Chooser – Input Method configuration tool]
この画面で[Enable input method feature]のチェックボックスにチェックをつける。
あとは[OK]で変更を保存し、X Windowを再起動すれば
[Ctrl+Space]で日本語入力できるようになりました。

Fedora8での話です。他はわからんです。

パスワードなしSSH接続

SSHを利用する場合通常パスワードを用いて認証を行いますが
公開鍵を使ってホストの証明を行い
この鍵を事前に承認しておいて、鍵が一致すればパスワードの入力をせずに接続することができます。
今回サーバ再構築のときに方法をまた調べたのでついでにメモメモ。

公開鍵暗号方式には一般的に使われるものとして
RSAとDSAがありますが、個人的趣味ではRSAのほうが好きです。
ということでRSAを使った認証方法を記載します。

なにはともあれキーを生成。
リモートに接続するユーザで作成してください。

$ ssh-keygen

キーの保存場所とファイル名を聞かれますが変えたかったら変えてください。
ここでは「id-rsa」というファイルが作成されたと仮定します。
パスフレーズについては入力せずにそのまま[Enter]を。

どうにかして公開キー(上記コマンドで生成された鍵ファイルのid-rsa.pubと名前がついた方)を
リモートホストにコピーします。これは好きな方法で勝手にどうぞ。

続いてリモートホストにログインし、そのキーに対する接続の許可を設定します。
接続を許可するユーザでログインしてください。

$ cd .ssh/
$ touch authorized_keys
$ chmod 600 authorized_keys
$ cat ~/id-rsa.pub >> authorized_keys
$ rm ~/id-rsa.pub

これでキーを作成したホストから
リモートホストの許可したユーザへSSH接続する場合にパスワードが不要になります。

この「authorized_keys」という設定ファイルに書かれているキーと一致すれば
接続を許可してくれるみたいです。
他のホストからに対しても同様の形で追加していけば大丈夫です。
あとauthorized_keysはアクセス許可が600じゃないとうまくいかないようなので注意です。