電話回線とインターネット

電話回線を用いてインターネットに接続するには、Point-to-Point Protocol (略してPPP)という方式を使ってシリアルポートに接続されたモデムを経由し ISP(インターネットサービスプロバイダ)に接続します。この仕組みはFAXみたいなピーガー音を立ててアナログ電話回線でベッコアメインターネットに接続していた時代から完全にデジタル化された携帯電話網を用いる今まで基本的に変わりません。

Linuxでは pppd というプログラムによって PPP接続を行います。pppdの設定方法は Linuxディストリビューションによってまちまちですが、Walbrixは Gentoo Linuxをベースにしていますので Gentoo Linuxの方式に従っています。

WalbrixのようなサーバOSでわざわざモバイル網を使ってインターネット接続する理由は、設置環境がどのような状況であれインターネット網からリモートログインして管理操作が可能なようにするためです。つまりメンテナンス用回線ということになります。今は回線契約が月額 490円から可能なので、経済的な選択肢といえるでしょう。

シリアルポートの確認

伝統的に、モデムはシリアルポートに接続される機器であったことから、USB型のモデムも OSからはシリアルポートとして認識されます。pppdはシリアルポートを使用してインターネット接続を行います。

ls -l /dev/serial/by-id で、システムに認識されているシリアルポートの一覧を確認できます。

# ls -l /dev/serial/by-id/
total 0
lrwxrwxrwx 1 root root 13 Apr  2 20:46 usb-HUAWEI_Technology_HUAWEI_Mobile-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 Apr  2 20:46 usb-HUAWEI_Technology_HUAWEI_Mobile-if03-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Apr  2 20:46 usb-HUAWEI_Technology_HUAWEI_Mobile-if04-port0 -> ../../ttyUSB2

ここに何も出ない場合は残念ながらモデムがシステムに認識されていません。特別な信号を送信しないとモデムとして動作しない機器の可能性があります。Walbrix 3.8.5以降では、そのような機器に自動で切り替え信号を送るため usb_modeswitch を搭載していますが、usb_modeswitchの機器データベースにない機種は残念ながら切り替えができずモデムとして認識されないことになります。

モデムの特定

先述の例では、3本のシリアルポートがシステムに認識されている様子が見て取れます。しかし実際にはこれらはひとつのモデムです。モデムとして使用できるポートはこの中のひとつ(他のシリアルポートは用途が異なる)ですので、どれがモデムなのかを確認する必要があります。

太古の昔より、モデムはATコマンドというコマンドで制御することになっています。つまり、モデムを特定するにはこれらのシリアルポートの中から ATコマンドに正しく応答するものを選択すれば良いことになります。

シリアルポートを通じて直接機器と対話するには、cu というコマンドを使用します。-l オプションで使用したいシリアルポートのデバイス名を指定してください。

# cu -l /dev/serial/by-id/usb-HUAWEI_Technology_HUAWEI_Mobile-if00-port0
Connected.

Connected. と表示されたら、適当な ATコマンドを打ってみましょう。機器によって使用できる ATコマンドは異なりますが、一番基本的な「各種設定を初期値に戻す」コマンドはほぼ必ず ATZ です(大文字小文字を問いません)。ATコマンドが成功するとモデムは OK を返してきます。

atz
OK

これでこのポートがモデムであることが判明しました。もし何も表示されない場合や ERRORが返ってくる場合はそれはモデムポートではありませんので他のシリアルポートを試して下さい。

cuを終了してシリアルポートを切断するには、~ を押して少し待ち、[ホスト名] が表示されてから . を押してまた少し待ちます。

~[WBFREE01].
Disconnected.

SSHを使用してシステムにログインしている場合は、~ を2回押さないといけないことに注意してください。SSHも ~ を特別な入力として扱うためです。

ISP毎設定の作成

peer(接続先)設定ファイル

接続先インターネットプロバイダの設定ファイルを /etc/ppp/peers/接続先名 というファイル名で作成する必要があります。Walbrix 3.8.5以降の場合は /etc/ppp/peers/DTI というファイル名で DTIの月額 490円契約向けの設定ファイルを標準提供しています。

DTIの490円SIMはLTE化によりAPNなどの接続情報が変わりました。
ynmbl.netdream.jp
user@3gd.ynmbl.netuser@dream.jp
3gddti
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/3g -T ynmbl.net -U *99***1#"
230400
crtscts
noipdefault 
user "user@3gd.ynmbl.net"
persist
maxfail 0

他の ISPを使用する場合はこのファイルを適当な名前でコピーし、ISPからの指定に従って上記のうち ynmbl.net を APNに、user@3gd.ynmbl.netを PPPユーザー名に書き換えてください。また、ISPの提供する接続プランによって *99***1# の部分を書き換えなければならない場合もあります。

チャットスクリプト

peer設定ファイルの connect 行で指定されている /etc/chatscripts/3g は、一般的な3GモデムでPPP接続を行う際にモデムに与えるATコマンドに関する設定が記載されています(Walbrixにて提供)。これは大抵変更しなくていいはずですが、万一仕様の異なる3Gモデムをお使いの場合はこれを修正しなければならないかもしれません。

ABORT		BUSY
ABORT		VOICE
ABORT		"NO CARRIER"
ABORT		"NO DIALTONE"
ABORT		"NO DIAL TONE"
ABORT		"NO ANSWER"
ABORT		"DELAYED"
ABORT		"ERROR"
ABORT		"+CGATT: 0"

""		AT
TIMEOUT		12
OK		ATH
OK		ATE1

# SIMカードにPINが設定されている場合1234の部分を変更してコメントイン
#OK		"AT+CPIN=1234"

OK		AT+CGDCONT=1,"IP","\T","",0,0
OK		ATD\U
TIMEOUT		22
CONNECT		""

パスワード

PPP接続に使用するパスワードを /etc/ppp/pap-secrets に書き込んでおく必要もあります。3G接続では、大抵の場合SIMカードの固有IDで認証が行われるためパスワードは全員共通となっています。pap-secretsファイルには "ユーザー名" * "パスワード" のように記述してください。ユーザー名は先述のISP毎設定ファイルにてuser行で指定したユーザー名です。

"user@3gd.ynmbl.net" * "3gd"

pap-secretsファイルにはユーザー名とパスワードの組み合わせを何行でも書いておくことができ るため、複数のISPを使い分ける場合でもファイルを分ける必要はありません。

PPPインターフェイスの有効化

Gentoo Linuxでは /etc/conf.d/net ファイルにてネットワーク設定を行います。PPPを有効にするためには下記の3行が必要です。

config_ppp0="ppp"
link_ppp0="シリアルポートのデバイス名"
pppd_ppp0="call 接続先名"

ネットワーク設定ファイルにPPPの設定を書き加えたら、PPPインターフェイスの initスクリプトを有効にします。/etc/init.d で net.lo へのシンボリックリンクを net.ppp0 という名前で作成してください。

cd /etc/init.d
ln -s net.lo net.ppp0

専用ルーティングの設定

DTIの490円SIMは LTE移行の際グローバルIPアドレスが振り出されない方式に変更となりました。よってこの設定を行なっても外部からのアクセスは原則できません。

PPP接続が確立した際、その接続を通信経路として用いる設定を自動的に行うためのスクリプトを設置します(Walbrixには標準で設置済みです)。

これにより、PPP回線から入ってきたパケットによって開始された通信については以降デフォルト経路がどうあれ常に PPP回線を経路として用いるようになります。

/etc/ppp/ip-up.d/route.sh

#!/bin/sh
PPP_IFACE="$1"
PPP_LOCAL="$4"
TABLE=$((250+`echo $PPP_IFACE|sed 's/^ppp//'`))
ip route add dev $PPP_IFACE table $TABLE
ip rule add from $PPP_LOCAL table $TABLE pref 100

/etc/ppp/ip-down.d/route.sh

#!/bin/sh
PPP_IFACE="$1"
PPP_LOCAL="$4"
TABLE=$((250+`echo $PPP_IFACE|sed 's/^ppp//'`))
ip rule del from $PPP_LOCAL table $TABLE pref 100

PPP回線の接続と切断

PPP回線を接続する時は、先にシンボリックとして作成した initスクリプトである net.ppp0 を startします。

/etc/init.d/net.ppp0 start

接続状況を確認するには、ifconfig ppp0 としてください。正常に接続されていれば、ISPから割り当てられた IPアドレスがそれで確認できます。エラーになる場合はPPP接続が確立していません。PPP接続には数秒かかるので少し待つか、数秒経っても接続されていない場合は設定を見直して下さい。接続処理のログを確認する必要がある場合は /etc/init.d/sysklogd start で syslogdを開始し、/var/log/messagesや /var/log/syslog を確認下さい。

PPP回線を切断する時は、同じスクリプトを stop で呼び出して下さい。

/etc/init.d/net.ppp0 stop

3Gモデムを本体に付けっぱなしにする場合は、OSの起動時に PPP接続を自動で開始することもできます。

rc-update add net.ppp0 default
OS起動時の自動PPP接続をやめるには
rc-update del net.ppp0
とします。