2011年07月06日

UbuntuでPPTP(VPN)サーバを構築する

知人から自宅のUbuntuにPPTPサーバ環境を構築して外出先から自宅のLANに接続しようと色々と試行錯誤したがうまく動かなかったという話を聞きまして、先日インストールした僕のUbuntuに環境を作ってみることにしました。

今回検証用として用意した環境は次の通りです。

51)

Ubuntuサーバ自体にグローバルIPアドレスを設定し、直接インターネットに接続します。

Ubuntuの設定


先ずは端末を開いてUbuntuにpptpサーバ(pptpd)をインストールします。

$ sudo apt-get install pptpd
[sudo] password for netbuffalo:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  bcrelay
以下のパッケージが新たにインストールされます:
  bcrelay pptpd
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 2 個。
90.5 kB のアーカイブを取得する必要があります。
この操作後に追加で 442 kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://jp.archive.ubuntu.com/ubuntu/ natty/main bcrelay i386 1.3.4-3ubuntu1 [10.3 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu/ natty/main pptpd i386 1.3.4-3ubuntu1 [80.2 kB]
90.5 kB を 0秒 で取得しました (274 kB/s)
未選択パッケージ bcrelay を選択しています。
(データベースを読み込んでいます ... 現在 137780 個のファイルとディレクトリがインストールされています。)
(.../bcrelay_1.3.4-3ubuntu1_i386.deb から) bcrelay を展開しています...
未選択パッケージ pptpd を選択しています。
(.../pptpd_1.3.4-3ubuntu1_i386.deb から) pptpd を展開しています...
man-db のトリガを処理しています ...
ureadahead のトリガを処理しています ...
ureadahead will be reprofiled on next reboot
bcrelay (1.3.4-3ubuntu1) を設定しています ...
pptpd (1.3.4-3ubuntu1) を設定しています ...
Starting PPTP Daemon: pptpd.

次に/etc/pptpd.confを編集しpptpdサーバの設定を行います。

$ sudo gedit /etc/pptpd.conf

geditなどのエディタでpptpd.confを開き、設定ファイル下にあるlocalip, remoteipを設定します。

$ sudo gedit /etc/pptpd.conf

[/etc/pptpd.confファイル]
#localip 192.168.0.1
#remoteip 192.168.0.234-238,192.168.0.245
# or
#localip 192.168.0.234-238,192.168.0.245
#remoteip 192.168.1.234-238,192.168.1.245
localip 192.168.0.234
remoteip 192.168.0.235-238 

自宅のネットワークが192.168.0.0/24(192.168.0.1~192.168.0.254)なので、この中から使っていないアドレスをlocalip(pptpdサーバ/UbuntuのIPアドレス)、remoteip(接続するPPTPクライアントのIPアドレス)に設定します。この例では外部から接続してきたクライアント(Windows XP)には192.168.0.235~238までのアドレスを付与します。

次にPPTP接続用のユーザID、パスワードを/etc/ppp/chap-secretsファイルに設定します。

$ sudo gedit  /etc/ppp/chap-secrets
 
[/etc/ppp/chap-secretsファイル]
# Secrets for authentication using CHAP
# client     server     secret               IP addresses
user1 pptpd password1 *

ここではclient(ユーザID)としてuser1を定義し、serverにpptpd(※1)、secret(パスワード)にpassword1、IP address(クライアントに割り振るIPアドレス)は*(特に指定無し)を設定しています。
※1/etc/ppp/pptpd-optionsファイルに定義されているpptpdサーバ名。初期値がpptpdであり、ここでは特に変更はしない。

ここまで出来たらpptpdサーバを再起動します。
端末から次のコマンドを実行します。

$ sudo /etc/init.d/pptpd restart

Screenshot-5

もし、上手く動かない場合は/var/log/syslogファイルを覗いてみましょう。
設定ファイルの記述に誤りがあればpptpd起動時にエラーが出力されています。

$ grep pptpd /var/log/syslog
・・・
/var/log/syslog:Jul  6 0:29:15 netubuntu pptpd[771]: MGR: Bad IP address (*) in config file!
・・・

あと、もう一つ設定します。今回サーバとなるUbuntuは複数のネットワーク・インタフェース(自宅LAN、pppインターフェース)間でパケットを転送する必要があります。ですのでUbuntuサーバをブリッジ(データ中継器)として動かす為の設定を行います。

この設定をLinuxカーネルに反映させるには2つの方法があります。常に使う場合には、/etc/sysctl.conf ファイルを編集し、net.ipv4.ip_forward=0を1にします。

$ sudo gedit /etc/sysctl.conf 

[/etc/sysctl.confファイル]
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1  

Screenshot-1

こうしておくとUbuntu起動時にブリッジ設定が有効になります。

もし、一時的又はUbuntuを再起動したく無い場合、/proc/sys/net/ipv4/ip_forwardファイルを編集します。

$ sudo gedit /proc/sys/net/ipv4/ip_forward

sudoで開いても保存する際にエラーが出ますが、geditであれば実際には保存されていました。

Screenshot-3

※suコマンドでrootになればエラーは出ませんが、rootアカウントのパスワードを設定($ sudo passwd root)し、rootでログイン出来るようにする必要があります。


PPTPクライアント(Windows PC)から接続


ここからはクライント側の設定です。”新しい接続ウイザード”をクリックし、

win_pptp1

”職場のネットワークへ接続する”を選択。

win_pptp2

接続方法は”仮想プライベっとネットワーク接続”。

win_pptp3

接続名は適当に。

win_pptp4

ここでは”最初の接続にダイヤルしない”を選択。

win_pptp5

接続先のPPTPサーバのIPアドレス(グローバルIP。ここでは111.188.32.211)を入力します。

win_pptp6

最後にユーザ名(user1)、パスワード(password1)を入力します。

win_pptp7

接続ボタンをクリックすると、、

win_pptp8

接続できましたー。

本当に接続できているか自宅のLANにいるPCのIPアドレスにPINGなどで疎通確認してみてください。

Ubuntu側でもifconfigコマンドでネットワーク・インタフェースの状態を確認することが出来ます。

$ ifconfig
#PPTP接続用のグローバルIP(イー・モバイル)
ppp0      Link encap:Point-to-Pointプロトコル 
          inetアドレス:111.188.32.211  P-t-P:10.64.64.64  マスク:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  メトリック:1
          RXパケット:17802 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:24805 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:3
          RXバイト:3102444 (3.1 MB)  TXバイト:1417911 (1.4 MB)

#クライアントからの接続によりPPTPサーバ用として追加されたインタフェース
ppp1      Link encap:Point-to-Pointプロトコル 
          inetアドレス:192.168.0.234  P-t-P:192.168.0.235  マスク:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1396  メトリック:1
          RXパケット:17 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:10 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:3
          RXバイト:1026 (1.0 KB)  TXバイト:684 (684.0 B)

#自宅LAN側の無線LANインタフェース
wlan0     Link encap:イーサネット  ハードウェアアドレス 2c:81:58:e6:33:18 
          inetアドレス:192.168.0.25  ブロードキャスト:192.168.0.255  マスク:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:29804 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:8163 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:3013022 (3.0 MB)  TXバイト:1230058 (1.2 MB)


自宅のWindowsネットワークにアクセスしたい


このままだとPPTPで接続した自宅のLANにあるWidnows PCの共有フォルダやファイル・サーバにはアクセスできません。


win-pptp9

もし、Windowsネットワーク上の共有フォルダにアクセスしたい場合、 Ubuntu側の/etc/pptpd.confファイルを編集し、ブロードキャストを転送するネットワーク・インタフェースをbcrelayとして指定します。

$ sudo gedit /etc/pptpd.conf

[/etc/pptpd.confファイル] 
# TAG: bcrelay <if>
#       Turns on broadcast relay to clients from interface <if>
#
#bcrelay eth1
bcrelay wlan0

今回の例では無線LANインタフェースで自宅のネットワークに接続しているのでwlan0を設定します。
(設定したら $ sudo /etc/init.d/pptpd restartでpptpdサーバを再起動し、再度クライアントからPPTP接続してみましょう)


自宅LAN内にPPTPサーバを構築する場合


今回のようにUbuntu(pptpd)サーバに直接グローバルIPを設定せず、間にブロードバンド・ルーターが入る場合もあると思います。

09)

こういった場合には、ルーターを設定し、LAN側にいるpptpdサーバに、

 1)TCP 1723番ポート
 2)プロトコル 47番(GREプロトコル)

を転送するようにします。
(YamahaのRTシリーズであれば、このあたりが参考になるかと)


ヤマハルータでつくるインターネットVPN [第3版]
井上孝司 
毎日コミュニケーションズ 
売り上げランキング: 204725


Posted by netbuffalo at 21:17│TrackBack(0) Linux | ネットワーク


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/3365713
この記事へのコメント
4
現在、私はデルのために働くと自由なサーバー上の記事は非常に印象的だと思った。私は、サーバーがネットワークリソースを管理するネットワーク上のコンピュータまたはデバイスだと思うと思う。
Posted by サーバ at 2011年10月04日 19:35