■ Raspberry PiをVPNサーバー化してみる
まず、VPNを作る代表的なプロトコルである、「PPTP」、「IPSec」を勉強。どちらも認証、暗号化、カプセル化を行う。
・PPTP(Point to PointTunneling Protocol)
・・・Microsoft社によって提案された暗号通信のためのプロトコル。2台のコンピュータの間で情報を暗号化して送受信するので、インターネットを通じて安全に情報をやり取りできる。企業などで、インターネットを介した遠距離のLAN間接続や、社員がインターネットを通じて社内LANにアクセスするのに使われる。同社のWindows NTシリーズには標準でPPTPの機能が付属する。・IPSec(Security Architecture for IP)
・・・インターネットで暗号通信を行うための規格。IPのパケットを暗号化して送受信するため、TCPやUDPなど上位のプロトコルを利用するアプリケーションソフトはIPsecが使われていることを意識する必要はない。現在インターネットで使われているIPv4ではオプションとして使用することができるが、次世代のIPv6では標準で実装される。
今回はPPTPを使用したVPNサーバ作りに挑戦参考サイト
http://qiita.com/sumyapp/items/b7300a9ffa316d676aa1
1. Pptpdのインストール
pi@raspberrypi ~ $ sudo apt-get install pptpd2. Pptpdの設定
自身のIPと接続クライアントへの割当IP
【 /etc/pptpd.confの編集 】
pi@raspberrypi ~ $ diff /etc/pptpd.conf /etc/pptpd.conf.org
76,77c76,77
< localip 192.168.0.4
< remoteip 192.168.0.234-238,192.168.0.245
---
> #localip 192.168.0.1
> #remoteip 192.168.0.234-238,192.168.0.245
3. DNSの設定
接続してきたクライアントが使用するDNSサーバの設定
【 /etc/ppp/pptpd-optionsの編集 】
pi@raspberrypi ~ $ diff /etc/ppp/pptpd-options /etc/ppp/pptpd-options.org
55c55
< ms-dns 192.168.0.1
---
> #ms-dns 10.0.0.1
4. 接続クライアントのアカウント設定
【 /etc/ppp/chap-secretsの編集 】
pi@raspberrypi ~ $ sudo diff /etc/ppp/chap-secrets /etc/ppp/chap-secrets.org
3c3
< chopper pptpd chopper *
---
>
5. IPフォワード設定
IPフォワード(IPフォワーディング - IP forwarding)とは
※宛先アドレスが自分では無いパケットも転送するようにしなければ、VPN経由で接続した端末からのパケットはすべて破棄されてしまう
【 /etc/sysctl.confの編集 】
pi@raspberrypi ~ $ diff /etc/sysctl.conf /etc/sysctl.conf.org
28c28
< net.ipv4.ip_forward=1
---
> #net.ipv4.ip_forward=1
44c44
< net.ipv4.conf.all.accept_redirects = 0
---
> #net.ipv4.conf.all.accept_redirects = 0
52c52
< net.ipv4.conf.all.send_redirects = 0
---
> #net.ipv4.conf.all.send_redirects = 0
※参考サイトとに書いてある項目が無かったりしたので、あるのだけコメントを外す。
6. MTU/MRUの設定
【 /etc/ppp/optionsの編集 】
pi@raspberrypi ~ $ diff /etc/ppp/options /etc/ppp/options.org
80c80
< mru 1280
---
> #mru 542
185c185
< mtu 1280
---
> #mtu <n>
6. ルータの設定
ポートフォワード設定
一般的な家庭では、ブロードバンドルータの類の下にサーバをぶらさげているかと思います。このように pptpd サーバが LAN の内部にある場合、ポート転送が必要になります。ルータの設定にて TCP の 1723 番ポートと、プロトコルの 47 番を pptpd サーバに転送してください。TCP の 47 番ポートではなく、47 番のプロトコル(GRE)であることに注意してください。
※GREとは
GRE ( Generic Routing Encapsulation ) はトンネルプロトコルの1つです。RFC1701, 2784で定義されています。トンネルプロトコルにはLayer2トンネリングのL2F, PPTP, L2TPとLayer3トンネリングのGRE, IPsec等があります。トンネリングとは、あるトラフィックを別のプロトコルでカプセル化して伝送することにより、通信を行う技術です。
パケットのカプセル化とその解除はトンネルの両端の機器で行う為、両端の機器が直結しているように見えます。
パケットのカプセル化とその解除はトンネルの両端の機器で行う為、両端の機器が直結しているように見えます。
・自宅ルータの設定内容
ルータ ATerm BL190HW ATerm D9C9DC
ルータ ATerm BL190HW ATerm D9C9DC
これでいける。。。はずだが、Android端末からは接続できませんでした。。
※ちなみにRaspberry PIにはパケットが到着している模様
解析ツール sudo tcpdump -s0 -i eth0 -X port 1723
http://linux-biyori.sakura.ne.jp/setting/st_tcpdump.php
※追加 2013.10.26
その後つながらない事の調査
http://www.kurobuti.com/blog/?p=4275
↑サイトを参考に /var/log/pptpd.logにログ出力
・Android端末からの接続時のエラーログ
※ちなみにRaspberry PIにはパケットが到着している模様
解析ツール sudo tcpdump -s0 -i eth0 -X port 1723
http://linux-biyori.sakura.ne.jp/setting/st_tcpdump.php
※追加 2013.10.26
その後つながらない事の調査
http://www.kurobuti.com/blog/?p=4275
↑サイトを参考に /var/log/pptpd.logにログ出力
・Android端末からの接続時のエラーログ
Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
pptpd-logwtmp: $Version$
using channel 8
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <mru 1280> <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfcfb351> <pcomp> <accomp>]
LCP: timeout sending Config-Requests
Connection terminated.
Modem hangup
LCP: timeout sending Config-Requests ◀︎ここが怪しい?
Connect: ppp0 <--> /dev/pts/1 ◀︎これは何をしているのか?
https://www.grnt.ne.jp/internet_config.php?cnt=40
↑ここにこんな記述が
PPPOEで接続した場合の仮想NICは【ppp0】になります。iptables等でNICを設定している場合は【ppp0】に変更して下さい
PPPoEとは・・・
http://www.n-assist.com/booknavi/pppoe.htm
NICとは・・・
http://e-words.jp/w/NIC-2.html
iptablesとは・・・
Linuxに実装されたファイアウオール機能です。Linuxカーネル2.4以降に組み込まれています。
iptablesでは、コンピュータがやり取りするパケットを、あらかじめ定義しておいた「チェイン」単位に分類し、チェインごとにどのような処理を行うかを「ルール」として設定します。
主なLinuxディストリビューションでは、次の3種類のチェインが標準で用意されています(図1)。
・INPUT
(サーバーへ到達するパケット)
・FORWARD
(サーバーを通過するパケット)
・OUTPUT
(サーバーから送出するパケット)
ユーザーが新しいチェインを追加することもできます。
ルールでは、パケットの送出元(ソース・アドレス)やパケットのあて先(ディスティネーション・アドレス)などを指定し、該当するパケットに対し、どのような処理を行うかを指定します。処理には、パケットを破棄する「DROP」、拒否パケットを送出する「REJECT」、許可をする「ACCEPT」などを指定します。
現在のiptablesの設定
https://www.grnt.ne.jp/internet_config.php?cnt=40
↑ここにこんな記述が
PPPOEで接続した場合の仮想NICは【ppp0】になります。iptables等でNICを設定している場合は【ppp0】に変更して下さい
PPPoEとは・・・
http://www.n-assist.com/booknavi/pppoe.htm
NICとは・・・
http://e-words.jp/w/NIC-2.html
iptablesとは・・・
Linuxに実装されたファイアウオール機能です。Linuxカーネル2.4以降に組み込まれています。
iptablesでは、コンピュータがやり取りするパケットを、あらかじめ定義しておいた「チェイン」単位に分類し、チェインごとにどのような処理を行うかを「ルール」として設定します。
主なLinuxディストリビューションでは、次の3種類のチェインが標準で用意されています(図1)。
・INPUT
(サーバーへ到達するパケット)
・FORWARD
(サーバーを通過するパケット)
・OUTPUT
(サーバーから送出するパケット)
ユーザーが新しいチェインを追加することもできます。
ルールでは、パケットの送出元(ソース・アドレス)やパケットのあて先(ディスティネーション・アドレス)などを指定し、該当するパケットに対し、どのような処理を行うかを指定します。処理には、パケットを破棄する「DROP」、拒否パケットを送出する「REJECT」、許可をする「ACCEPT」などを指定します。
現在のiptablesの設定
pi@raspberrypi ~ $ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
0 件のコメント:
コメントを投稿