RaspberryPI(というかUbuntu)上にVPNサーバー構築(PPTP)

  • 90
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

RaspberryPIについて

25$で買えちゃうスーパー小さいスーパーオススメPCです。
2014年7月に新しいバージョン、「Raspberry Pi Model B+」が発表・発売されました。今から購入される方はこちらをおすすめします。
参考リンク: TechCrunch

VPNサーバとして使う際、有線LAN接続であれば別段の問題はありませんでしたが、Wi-fi無線LANアダプタ(USB)で使う場合には、無線LANアダプタに十分な電力を安定的に供給できないという問題が旧モデルにはありました。有志な人々はコンデンサを追加するなどしてこれに対応してきました。
参考リンク: RaspberryPiにコンデンサ追加で電源強化

新しい「Raspberry Pi Model B+」であればコンデンサのハンダ付けなどの作業をすること無く、安定的に動作させられると思います。

pptpdのインストールと設定

5分あればできると思いますです。

必要があればシステムを最新の状態に更新する

$ sudo apt-get update
$ sudo apt-get upgrade

pptpdのインストール

$ sudo apt-get install pptpd

pptpdの設定(自身のIPと接続クライアントへの割り当てIP)

$ sudo vi /etc/pptpd.conf

ファイル末尾にコメントアウトされている部分のコメントアウトを外しましょう。
localipはVPNサーバとなる設定中のこの端末のIPを設定してください。もし、は?というかたはとりあえず、ルーターの設定画面からこの端末に固定的にDHCPにてIPアドレスを設定してください。
知っていると思いますが、一応、$ ifconfig でMACアドレスを調べられます。

/etc/pptpd.conf
localip 192.168.0.2
remoteip 192.168.0.234-238,192.168.0.245

DNS設定

接続してきたクライアントが使うDNSサーバを設定しましょう。
通常の場合、ルータのIPか、適当に8.8.8.8でも突っ込んでおくといいかと思います。

$ sudo vi /etc/ppp/pptpd-options
ms-dns 192.168.0.1

接続クライアント用アカウント設定

pptpにてアクセス出来るユーザアカウントを追加する
パスワードは平文保存のため、注意。

$ sudo vi /etc/ppp/chap-secrets
# User名  サーバ名  パスワード  割り当てIP
hoge   pptpd   hogehoge   *

IPフォワード設定

Linux自体の設定にて、IPフォワードを有効にする(デフォルトでは無効)
宛先アドレスが自分では無いパケットも転送するようにしなければ、VPN経由で接続した端末からのパケットはすべて破棄されてしまう

$ sudo vi /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward=1 # コメントアウトを外す
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0

MTU/MRUの設定

この設定をしなくてもマシンによっては繋がるんですが、iOSとかMacとかはぶっちぶっちきれます。っていうか使えないです、はい。デフォルトではどちらも1500設定だったと思います。これが切れる理由はVPNによるトンネリングするため、それに用いるヘッダ情報が多くなり、1500を超過してしまうためです。

$ sudo vi /etc/ppp/options
mtu 1280
# Set the MRU [Maximum Receive Unit] value to <n> for negotiation.  pppd
# will ask the peer to send packets of no more than <n> bytes. The
# minimum MRU value is 128.  The default MRU value is 1500.  A value of
# 296 is recommended for slow links (40 bytes for TCP/IP header + 256
# bytes of data).
mru 1280

余談ですが、mruのコンフィグには上記のように、低速だったら296bytesをおすすめするぜーと書いてあります。

次はルーターの設定をしましょう

ルーターは別にあるよ(普通はそうだと思います)という方はルーターのポートフォワード設定をしましょう。

一般的な家庭では、ブロードバンドルータの類の下にサーバをぶらさげているかと思います。このように pptpd サーバが LAN の内部にある場合、ポート転送が必要になります。ルータの設定にて TCP の 1723 番ポートと、プロトコルの 47 番を pptpd サーバに転送してください。TCP の 47 番ポートではなく、47 番のプロトコル(GRE)であることに注意してください。
http://d.hatena.ne.jp/MIZUNO/20090927/1254001541

ここまでで動作するようになります。おめでとう!

動作テスト

iPhone / Android / Mac などから、PPTPプロトコルにて接続してみましょう。
サーバのIPはこの設定したVPNサーバ端末及びルーターのグローバルIP、もしくはDNSを設定してください。
RSA SecureIdとかは設定していないのでオフです。
アカウントとパスワードはさっき設定したものを入れてください。
今回はプロキシなども設定してないので、普通は設定はしなくてよいです。

必要な方は、VPNサーバにファイアウォールを設定しましょう

ufwのインストール(IPTablesでもいいけどね)

$ sudo apt-get install ufw
$ sudo ufw status

許可するポートの設定

今回はVPNサーバをデフォルトポートの1723にて動かしているので、1723を許可する。
それ以外は各自設定してね。というか、IPTables設定済みの方が多いと思うので、各自設定してね。
sshをallowするの忘れてやっちゃうとオシマイだよ気をつけてね当たり前だけど。

$ sudo ufw allow ssh
$ sudo ufw allow 1723/tcp

一応、デフォルトの設定はdenyにしておく

$ sudo ufw default deny

パケットの転送の許可設定

$ sudo vi /etc/default/ufw

フォワードポリシーをACCEPTに変更

DEFAULT_FORWARD_POLICY="ACCEPT"

NAT系の設定を追加します

$ sudo vi /etc/ufw/before.rules

ファイル先頭に下記行を追加してください。192.168.0.0/24 からのパケットを eth0 に転送するという意味です。
eth0以外のethをお使いの方はもちろん変更してくだい。
何を使ってるかは知ってると思うけど、ifconfigコマンドで確認出来ると思いますよ。

/etc/ufw/before.rules
# NAT Table Rules
*nat
: POSTROUTING ACCEPT [0:0]
# Allow forward traffic from eth0:0 to eth0
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

COMMIT

さいごにufwを再起動して設定反映

sudo ufw disable && sudo ufw enable

これでおわりです。お疲れ様!

速度測定

ためしにLTE接続したiPhoneで通信してみつつ、topしてみましたが、ロードアベレージ的にはCPUなどがボトルネックにはなっていないっぽいです。
もちろん、純粋なLTEよりはだいぶ劣りますけどね。

LTE->自宅(100M)->SPEEDTEST_SERVER(iOSアプリ)
- DL: 8Mbpsぐらい
- UP: 400kbpsぐらい

LTE->SPEEDTEST_SERVER(iOSアプリ)
- DL: 12Mbpsぐらい
- UP: 400kbpsぐらい

うん、UPが遅いのはSPEEDTESTのせいですね、はい。

おわりに

raspberrypiがvpnサーバになりました。おめでとう!
raspberrypiがすごいというよりかは、Linuxなんでもサーバ系のこと出来るよね凄いよねUbuntuはapt-get便利だよねって感じですが、やっぱりなにより、25$で買えてGUIさえも動かせる、ほんとにほんとにほんとに小さいPCであるRaspberryPIが凄いです。

ちなみにデフォルトロケールはen_GBなので、ちょっとGBってレアいよねって思っちゃいました。ja_JPについしちゃいましたけど、日本語でifconfig結果とか出てきちゃうとちょっときもいです。。。