はじめに
こんにちは。宮永です。
最近X(Twitter)やYouTubeで「公衆電話でダイヤルアップしてみた」のような投稿をよく見かけます。令和の時代になぜかブームが来ているようです。そこでダイヤルアップ接続ブーム(?)に乗って、「PPPサーバを立てて公衆電話から自宅にダイヤルアップ接続してみた」ブログを投稿します。
今回はUbuntuサーバと入手が容易なアナログモデムを用いてダイヤルアップサーバを構築し、実際に公衆電話から接続してみるところまでやります。
ちなみに、本来ダイヤルアップの接続先は契約したISPです。ニフティは2024年1月現在もダイヤルアップ接続サービスを提供しているため、多くの「ダイヤルアップ接続してみた」投稿では接続先として使われていることが多いようです。
開発環境
作業は以下の環境で行いました。汎用的な作業しか行っていないので、異なっていても問題ないことが多いと思います。
- ひかり電話
- HGW PR-400MI
- Ubuntu 22.04.3 LTS
- アナログモデム ×2(サーバ用と公衆電話で接続する用)
アナログモデムはブログの性質上特定の製品をおすすめできませんが、USB接続でドライバインストール不要の物を選んでください。Amazonで探すと選択肢はあまりないはずです。
方針
今回は、以下の流れで動くものを作成していきます。
- mgettyがアナログモデムを接続したデバイスを常時監視し、着信があった際にpppdを起動する。
- 接続要求を受けたpppdはログイン可否をサーバ機に登録されているユーザか否かで判定し、パスワード認証する。
- ログインできるユーザであれば設定したIPアドレスをクライアントに割り振り、内部ネットワークに加える。
開発
さっそく作業内容に入ります。
サーバ機のUbuntuは基本的な設定を完了し、root以外のユーザが登録してあるものとします。
アナログモデムをサーバ機に接続し、アナログモデムとHGWの「電話機2」接続口をモジュラーケーブルで接続します。接続口にある数字が内線番号になるため、今回接続したアナログモデムは内線番号2番になります。
HGWの設定
192.168.1.1 にブラウザでHGWの管理画面へアクセスし、ログインします。
電話設定→内線設定に移り、内線番号2の編集ボタンを押します。下の表にある自宅の電話番号の「着信音選択」が「IR」であることを確認します。
なお、HGWの管理画面へのアクセス方法やログインパスワードは環境により異なります。デフォルトの着信音はIRなので、もし管理画面にアクセスできない場合はそのまま次の作業に進んでしまっても問題ないケースが多いと思います。
パッケージインストール
ここから先の作業はすべてrootで行います。
Ubuntuなのでapt-getでインストールします。mgettyはシリアルポートを監視するデーモンで、pppdは名前の通りPPPを扱うデーモンです。
1 2 3 4 |
# apt-get update # apt-get upgrade # apt-get install mgetty # apt-get instal ppp |
mgettyの設定
シリアルポートの確認
アナログモデムがどのシリアルポートに接続されているかを確認します。
1 2 3 |
# ls -lrt /dev/serial/by-id/ total 0 lrwxrwxrwx 1 root root 13 Dec 30 13:42 usb-Conexant_USB_Modem_24680246-if00 -> ../../ttyACM0 |
この例だとttyACM0になります。後で使うのでメモしておきます。
mgettyの起動設定
/etc/systemd/system/mgetty.service を以下のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 |
[Unit] Description=mgetty modem getty After=network.target [Service] ExecStart=/usr/sbin/mgetty -D ttyACM0 33600 Restart=always RestartSec=3 Type=simple [Install] WantedBy=default.target |
ExecStartの行にあるttyACM0の場所は、先ほど調べたシリアルポートの名前にします。
設定ファイルの編集
/etc/mgetty/mgetty.login に /AutoPPP/ から始まる行がコメントアウトされているので、そこを以下のように編集します。
1 |
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login debug |
mgetty.configの設定
/etc/mgetty/mgetty.config に一番下に以下2行を追加します。
1 2 |
port /dev/ttyACM0 init-chat "" ATH OK ATS0=0Q0M0&D3&C1&M5&S1 OK |
ttyACM0の場所は、先ほど調べたシリアルポートの名前にします。
起動設定
systemd に新しいサービスを認識させ、有効にし、サービスを起動します。
1 2 3 |
# systemctl daemon-reload # systemctl enable mgetty.service # systemctl start mgetty.service |
pppdの設定
/etc/ppp/options に以下の設定を加えます。一部コメントアウトですでに書かれているものもあります。
1 2 3 4 |
ms-dns 8.8.8.8 proxyarp defaultroute usepeerdns |
pppdの認証設定
/etc/ppp/pap-secrets に以下の設定を加えます。似たような形でコメントアウトされているところがあるので、コメントアウトを外して編集します。
1 |
* server02 "" 192.168.100.200 |
この行は、<client_name> <server_name> <password> <IP_address>の順に記載します。
今回はPAMを使って認証するので、誰からでも受け付ける(ただし認証が通るかは別の話)ようにするために、<client_name>を*にします。同様の理由で<password>は””にします。
<server_name>にはサーバ名を記入します。この例だとserver02です。
<IP_address>はppp接続するクライアントに割り振りたいipアドレスを記述します。この例だと192.168.100.200です。サーバ機と同じサブネットに入るように、かつ重複がないようにします。
IPパケットの転送設定
以下の1行を実行します。
1 |
# echo 1 > /proc/sys/net/ipv4/ip_forward |
PAM(認証システム)の設定
nano /etc/pam.d/ppp に以下を追記します。
1 2 3 |
auth required pam_unix.so account required pam_unix.so session required pam_unix.so |
動作確認
完成したので、あとは動作確認をするのみです。実は家の内線でも検証できるのですが、せっかくなので流行りに乗って公衆電話から接続します。
公衆電話はよくある緑色のものとグレーのものがあります(厳密にはピンク等もありますが省略)。今回は受話器を使うのではなくモジュラーケーブルを差し込む必要があるため、グレーの公衆電話を利用します。
しかしこれが全然見つかりません。公衆電話の設置場所一覧ページはNTT東日本が提供しているのですが、公衆電話のタイプまでは記載がありません。自宅の近くはすべて緑色でした。
調べてみると、都庁・ディズニーランド(本当に?)・品川駅にあるという噂を得たので、パソコンとアナログモデムと大量の小銭を持って品川駅に行きました。
あれだけ探していたグレーの公衆電話が3つもありました。パソコンを取り出し作業します。周りからの目がかなり痛いですが、気にしてはいけません。
公衆電話の端末接続口にある「アナログ」の方とアナログモデムをモジュラーケーブルで接続します。液晶に表示されている「データ通信」のボタンを押し、お金を入れます。
PC側も設定します。Windowsであれば、設定→ネットワークとインターネット→ダイヤルアップ→新しい接続を設定する→インターネットに接続します→ダイヤルアップ から簡単に設定できます。「ダイヤルアップの電話番号」に自宅の電話番号を入力します。ユーザ名とパスワードはサーバ機(Ubuntu)に登録されているユーザのものを入力します。
接続をクリックしてしばらく待つと接続が完了します。ここからは電話代がかかるのでサクサク作業していきます。といってもダイヤルアップ接続なので通信速度は遅く、今どきのデラックスなwebページは開けません。今回は検証のために軽量なサイトを見ることにします。
google検索は重くて使えないので、ブラウザにURLを直書きし、サイトが読み込まれるのをしばらく待ちます。(この時間が一番周りからの目が痛いです)
じっと待っているとじわじわサイトが表示されます。これで検証完了です!恥ずかしいので急いで撤収します。
まとめ
完成しましたが、実は課題がいくつか残っています。何回か接続しないとうまくゲートウェイの情報が割り振られない時がある、ユーザを増やしたいときに逐次サーバ機のユーザを追加しないといけない等々、完ぺきではありません。設定をもっと見直す、radius認証に対応するといった作業が残っていますが、とりあえず完成ということにします。
PPPサーバに関する情報は古いものが多く調べても情報が出てこない場面が多かったので、ブログを書くことができてよかったです。(googleで「PPPサーバ」と調べても、PPPoEに関する情報ばかり出てきます……)
デーモンの起動方法がinit.dからsystemdに代わっている、PAMではpam_pwdb.soではなくpam_unix.soを使うなど、現代のOSに合わせた設定を見つける作業にも時間を取られてしまいましたが、そういった知識を身に着けるきっかけにもなり楽しかったです。
みなさんもPPPサーバを立てて、令和に起きているダイヤルアップ接続ブームに乗りましょう!
参考文献
高原 利之, ひとりで作れる Linuxインターネットサーバー入門, ソシム, 2000年