pptpd で Ubuntu を VPN サーバにする

外部から自宅内のマシンへ接続する必要があった場合、今までは ssh のポートフォワードで済ませていました。大体において、特定のアプリケーションが接続できれば用が足りるので、その都度 ssh で穴を掘るのが面倒がなくてよいのです。
しかしそれだけでは足りず、マシン全体がローカルネットワークに所属していた方が都合がいいという場合もあるかと思います。そこで Ubuntu Server を使って VPN を構築してみました。なおこれは最低限接続ができるだけの設定ですので、詳細は各ソフトウェアのマニュアルを参照してください。

pptpd のインストール

VPN といっても色々と種類がありますが、お手軽に PPTP を使ってみます。Ubuntu では pptpd パッケージをインストールすることで、PPTP のサーバになることが可能です。

/etc/pptpd.conf の設定

ファイル末尾に (Recommended) と書かれてコメントアウトされている部分があります。ここに PPTP サーバの IP アドレスと、接続してきたクライアントに割り当てる IP アドレスを設定します。


localip 192.168.1.25 # pptpdの動作しているマシンのIPアドレス
remoteip 192.168.1.190-199 # クライアントに割り当てるIPアドレス

IP フォワードの設定

/etc/sysctl.conf に以下の設定を行います。これを行わないと、接続した pptpd マシンには接続できるのに、LAN 内の他のマシンへパケットが転送されなかったりします。設定後はマシンを再起動しておきましょう。ちなみに元からコメントアウトされて記述されているので、コメントを解除するだけです。


net.ipv4.ip_forward=1

ユーザ名とパスワードの設定

/etc/ppp/chap-secrets にユーザ名、サーバ名、パスワード、IP アドレスを設定します。サーバ名と IP アドレスはアスタリスクワイルドカードを記述する事も可能です。


username pptpd "password" *

/etc/ppp/pptpd-options の設定

基本的にいじらなくても接続は可能です。name にサーバ名(デフォルトは pptpd)が指定されていますが、chap-secrets に別のサーバ名を指定した場合は、きちんと合わせておきましょう。

ルータの設定

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

クライアントの設定

クライアントマシンには、以下のパッケージをインストールしておいてください。

追記
  • network-manager-pptp



ネットワークの設定から VPN タブを開いて設定を追加して

アドレスにはグローバル IP アドレスを、ユーザ名とパスワードは /etc/ppp/chap-secrets で指定したものを記述します。

Advanced ボタンを押して詳細設定を開き、「Use Point-to-Point encryption (MPPE)」にチェックを入れます。これを入れておかないと接続できません。
あとは nm-applet をクリックして、設定した VPN を選択してください。もちろん、ネットワークに接続ができている状態で VPN を選択する必要があります。