[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [+]

PPP over TCP で外からおうちにログインする

引っ越してから、我が家も常時接続の仲間入りをしました。
…でも、IPアドレスは、動的だったらまだよいのですが、なんとプライベート アドレスでした。
会社など外からおうちのマシンにログインできたらなあと思っていたのですが、 PPP over TCP (UDP でもいいのですが)を使えばできることが判明しました。
# ただし、自由に触れる、グローバルアドレスを持ったマシンが必要になります。

目次


1. 環境

おうちにある、PPP でつなぎに行く方のマシンを、便宜上クライアント・マシンと呼びます。 同様に、グローバルアドレスを持つ受け側のマシンを、サーバ・マシンと呼びます。
サーバは、FreeBSD-4.6.2R なマシンです。
クライアントは、おうちで常時立ち上げることにした NetBSD-1.6 なマシンです。
以下のような構成を想定しています。

             +-------- インターネットかな --------+
             |                                    |
     +----------------+                           |
     | 得体の知れない |                           |
     |マンションルータ|                           |
     +----------------+                           |
             |                                    |
             |172.30.1.2                          |1.2.3.4
     +----------------+                    +----------------+
     |                |    PPP over TCP    |                |
     |   NetBSD-1.6   |===================>| FreeBSD-4.6.2R |
     |                |           6669/tcp |                |
     +----------------+                    +----------------+
                 192.168.19.19      192.168.19.78

192.168.19.xx となっているアドレスが、PPP で使用する予定のアドレスです。
サーバ・マシン(FreeBSD)は、6669/tcp で待ち受けています。
通常の PPP と同様、認証に PAP, CHAP を使用できます。PAP はパスワードが 生で流れますので、以下では、CHAP を使用します。
# MSCHAPv2 というのを使うと、データを暗号化してくれるようです。でも ssh でつないだりすればいいと思ったので、使いませんでした。

2. 前準備

FreeBSD ですと、userppp が最初から入っていますので、特に何かインストール をする必要はありません。
NetBSD は、package に userppp がありますので、pkg_add しておきます。

3. 設定

3.1 クライアント・マシンの設定

/usr/pkg/etc/ppp/ppp.conf に、以下を記述します。
# FreeBSD だったら /etc/ppp/ppp.conf です。

  ppp-out:
    set escape 0xff
    set device 1.2.3.4:6669/tcp
    set dial
    set timeout 0
    set log phase chat
    set ifaddr 192.168.19.19 192.168.19.78 255.255.255.255
    set authname "pppuser"
    set authkey  "ppppass1"

set device では、サーバ・マシンのグローバルアドレスなIPアドレスかホスト名と、 待ち受けているポートを指定します。
set ifaddr で指定するアドレスは、PPP で使用するアドレスです。最後のは ネットマスクです。Point-to-point ですので、これでいいと思います。
set authname および authkey で、それぞれ PPP のログイン名およびパスワード を指定します。(ちょっと安直です。悪い例です。)
ちなみに、パスワードなどを書いていますので、ppp.conf は root しか読めない ようにしておいた方が無難だと思います。

3.2 サーバ・マシンの設定

そして、/etc/ppp/ppp.conf に、以下を記述します。

    ppp-in:
      set log phase chat
      set timeout 300
      set ifaddr 192.168.19.78 192.168.19.19 255.255.255.255
      enable CHAP

timeout を5分にしていますが、0 (なし)にしてもらっても構いません。
うちのマンションで共同で使っているルータ(のようなもの)は、データが何も 流れないと、NAPT が 5分で切れてしまいます。 そんなとき TCP のセッションが不意に切られてしまいます。 その場合、timeout になって終了するように、設定をしておきました。 また、ユーザ名とパスワードを、/etc/ppp/ppp.secret に記述します。
# このファイルも root しか読めないようにしておきます。

  pppuser       ppppass1

そして、6669/tcp で待ち受けるために、まず、/etc/services に以下を追加します。

  ppp-in   6669/tcp    # for PPP over TCP

ppp 自体は、inetd から起動されるようにします。 /etc/inetd.conf に以下を追加します。

  ppp-in   stream  tcp  nowait  root  /usr/sbin/ppp ppp -direct ppp-in


4. 動作確認

クライアント・マシン側で、ppp を起動します。

  netbsd# /usr/pkg/sbin/ppp -ddial ppp-out

まずは、クライアント・マシン側で、ifconfig や ping を用いて確認をします。

  netbsd# /sbin/ifconfig tun0
  tun0: flags=51<UP,POINTOPOINT,RUNNING> mtu 1454
         inet 192.168.19.19 -> 192.168.19.78 netmask 0xffffffff
  netbsd# /sbin/ping 192.168.19.78
  PING server (192.168.19.78): 56 data bytes
  64 bytes from 192.168.19.78: icmp_seq=0 ttl=64 time=305.263 ms
  64 bytes from 192.168.19.78: icmp_seq=1 ttl=64 time=73.652 ms
  64 bytes from 192.168.19.78: icmp_seq=2 ttl=64 time=61.642 ms
  ^C
  ----server PING Statistics----
  3 packets transmitted, 3 packets received, 0.0% packet loss
  round-trip min/avg/max/stddev = 61.642/146.852/305.263/137.319 ms

おお、問題ないです。
今度は、サーバ・マシン側で、確認をします。

  freebsd# /sbin/ifconfig tun1
  tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
         inet6 fe80::212:34ff:fe56:789a%tun1 prefixlen 64 scopeid 0x9
         inet 192.168.19.78 -> 192.168.19.19 netmask 0xffffffff
         Opened by PID 12345
  freebsd# /sbin/ping 192.168.19.19
  PING client (192.168.19.19): 56 data bytes
  64 bytes from 192.168.19.19: icmp_seq=0 ttl=64 time=63.896 ms
  64 bytes from 192.168.19.19: icmp_seq=1 ttl=64 time=60.009 ms
  64 bytes from 192.168.19.19: icmp_seq=2 ttl=64 time=60.063 ms
  ^C
  ----client PING Statistics----
  3 packets transmitted, 3 packets received, 0.0% packet loss
  round-trip min/avg/max/stddev = 60.009/61.323/63.896/1.820 ms

こちらは、tun0 を別で使用しているので、tun1 になっています。

ただし、これだけだと、使っていない間はデータが流れないため、5分経つと 切られてしまいます。(…というのはうちの場合ですが。)
ですので、cron で1分毎に ping するようにします。crontab -e を実行し、 以下を追加します。

  *   *   *   *   *  /sbin/ping -c 1 192.168.19.78 > /dev/null 2>&1

Powered by Apache PostgreSQL Usupi Logo Kuri Logo
[Home] [Kuri] [Sysad] [Internet?] [Blog] [Java] [Windows] [Download] [Profile] [Flash] [-]
usu@usupi.org Last modified : Thu Mar 27 21:59:50 2003