384 :
66:
やあ、諸君、お元気かな。
昨日はGCアナログモデムとLinux RASの調整に手間取り、深夜になって
ようやくブロードバンド経由でオンのGCラグオルに降り立つことができた。
モデム同士の「相性」などとも遭遇し、かなりてこずったよ。
これは純粋な技術レポートであり、チートとは全く関係がないが、
多くの人に参考になると思うので、顛末を記録しておこう。
(激しくスレ違いだってのはわかっているけどさぁ)
385 :
66:02/06/01 14:35 ID:kBK71QzE
[使用した機材]
Pentium3-933MHz(cC0-FCPGA),Asus CUSL2C(i815)
PC133CL3-256MB Unbufferd Bulk memory * 2 = 512MB
Matrox Millennium G400DH-32MB AGP
Maxtor DiamondMAX80plus - 40GB
NIC#0(eth0):3Com 3C905B-J-TX 192.168.0.12 固定IPアドレス
NIC#1(eth1):PLANEX ENW9501F(DEC21140AC):1996年購入... 未使用状態
modem(ttyLT0):Lucent Technology Chip採用ソフトウェアPCIモデム(WinModem)
-- SOTECのボロPCについていたもの。ノーブランドのチャチなもの。
OS: Windows2000 Pro SP2 とRedHat7.3(FTP)のデュアルブート
ISDNルータ: YAMAHA RTA50i (アナログ回線エミュレータとしてのみ使用)
テスト用電話機:KENWOODコードレス電話
NIC#0は、192.168.0のローカルネットのスイッチングハブに接続。
外部へは、Linux kernel2.0/ROMベースマイクロサーバーのipchainsを経由する。
DNSは、本機とマイクロサーバーの両方で動作している。
ブロードバンドの帯域は公称10Mbps、実効600〜700KBytes/sec
386 :
66:02/06/01 14:36 ID:kBK71QzE
387 :
66:02/06/01 14:40 ID:kBK71QzE
[経過2] Windows2000 Professionalにおける不具合
Win2000では、LT-WinModemはそのままで認識する。アナログモデムで着信させ、
LANにパケットをのせるやり方は、多くのサイトで説明されているので、ここでは
述べない。LT-WinModemは、この用途には不向きであるようだ。電話機から発呼
するとちゃんと着信するのに、GCのモデムの発呼を認識しない。ATコマンドで
手動でオンフックにしさえすれば通信は正常に行われるが、自動オンフックは
常に失敗してしまう。原因は不明であるが、Linuxでは正常に着信できるので、
Windows側の問題であろう。Lucentの最新ドライバ(8.22)で試してもだめだったし、
モデムレジスタをどのようにいじりたおしても着信はしなかった(ATS0=1に
してなかったんだろうというツッコミはナシね)。GC側のATレジスタ操作で、
信号送出レベルを上げてもだめだった。Win2000の場合は、RS232C接続の
外付けモデムを使う方が確実と思われる(良い物は入手しづらくなっているようだ)。
少なくてもATS0=1は設定しないと着信しない。作業の容易化のため、ATE1も
設定したほうがいい(ATE1を設定するまでは、キータイプが表示されない)。
Winでの操作は、ハイパーターミナルを使う。設定をAT&Wで書き戻すのを忘れずに。
LT-WinModemのコマンドは、ここを参照してほしい。
http://www.geocities.co.jp/SiliconValley-SanJose/7682/
388 :
66:02/06/01 14:41 ID:kBK71QzE
[経過3] LinuxにおけるLucent Technology PCIモデム(LT-Winモデム)の認識
Kernel2.2/2.4用のドライバ(Lucentが基礎コードを提供)が、linuxmodems.org
から入手できる。RedHat7.3の場合、インストールメディアにRPM形式で
収められているため、導入は容易である。kernel-2.4.18-3用のドライバは
8.22a2(a3?)というものだが、同じバージョンのカーネルをベースにしていても、
VineLinux2.5(RedHat系)では動作しなかった。Debian, SuSEなど、代表的な
ディストリビューション用にプレコンパイルされたパッケージが用意されて
いるものは導入が簡単だが、マイナーなディストリビューションではカーネルの
設定をちゃんとやらないと動かない可能性があるということだ。マイナーなLinux
の場合は、あきらめてRS232C接続の外付けモデムの方がよい。FreeBSDやSolaris用
のPCI内蔵モデムドライバは存在しない(外付けか、PCMCIAカードを使うしかない)。
正常にモジュールが導入されると、/dev/ttyLT0にATコマンドを発行すれば、
結果が返ってくる(Linuxにはtipやcuがないのがちょい不便か)。
389 :
66:02/06/01 14:42 ID:kBK71QzE
[経過4] mgetty+sendfaxによるppp着信機能の実現
モデムがLinuxカーネルで認識されていれば、この作業はたやすい。まずは
mgettyのソースをとってきて、configure;make;make installする。
設定は、こんなところとか
http://www.sphere.ad.jp/bbskura/machine/pppserv.html こんなところを
http://ash.jp/env/srv/pppsrv.htm 参考にしてほしい。ウチでは、モデム側のpppネットワークは192.168.1とした。
接続が確立されると、ppp0というネットデバイスが自動作成され、接続が
切れると消滅する。GCから着信したかどうかは、tcpdump -i ppp0などを
使えば判明する。Windowsではどうやっても着信しなかったLT-WinModemが、
Linuxではすんなり着信するのが不思議だ。
釈迦に説法と思うが、Linuxで作成したユーザーアカウントをGCのログイン
情報とすること(PAP認証なので)。
390 :
66:02/06/01 14:44 ID:kBK71QzE
[経過5] iptablesによるNATルータの構築
これが一番面倒だ。最近のLinuxはセキュリティのため、明示的に指示して
やらないと、自動的にパケットがフォワードされるというようにはなってない。
GCから公式ページが見れるだけではPSOはプレイできない。UDPポートの40000台
をポートフォワーディングしなければならない。
http://isweb37.infoseek.co.jp/play/suzu_/linux_router/conf_linux.html GCのポートがこのとおりであるという保障はないし、認証時にもUDPパケットが
使われるため、ppp0からのUDPパケットすべてはeth0に行き、ポート32769〜50000
までのeth0からのUDPパケットは無条件でppp0に行くようにした。セキュリティ上
は相当乱暴だが、内部ネットだからこれでも許されるだろう。
ウチはeth0が固定IPなので、IPマスカレードではなく、SNAT/DNATを使った。
面倒なのでppp0から来たUDPパケットはすべて外部に丸投げすることにしたため、
Linuxマシン内にローカルに立ち上げたネームサーバは使わずじまいとなった
(外界との接続点である、マイクロサーバのDNSを利用)。
なお、PSOのネームサーバの扱いにはクセがある。ネームサーバは2つ登録できる。
ソニチのWebサイトの閲覧では、第1DNSがダメなら第2DNSを試す。しかし
PSOプレイ時には、第1DNSがダメだと、そのまま接続が失敗してしまう。
よって公式サイトは見れるがプレイできない場合は、DNSサーバの第1と第2を
入れ替えてみるとよいかもしれない。このあたりはtcpdumpを使うと挙動がわかる。