- PR -

mgettyを改造して擬似モデムにしたい

1
投稿者投稿内容
MATSU
会議室デビュー日: 2007/11/20
投稿数: 8
投稿日時: 2008-02-11 15:00
mgettyを改造して擬似モデム(RASサーバー)を作成し、PCからその
擬似モデム(RASサーバー)を使用してLAN通信できるか試してます。

しかし、どのようにダイアルアップ接続からLAN通信へと変化させれ
ばよいかわからないため、アドバイスを頂ければ幸いです。

■テスト環境

・ネットワーク構成

 PC(WindowsXP) → VM CentOS5.1(RAS(改造mgetty))
  → ルーター → 他PCのWEBサーバーなど

※ PC と VMWare上のCentOS5.1の間のみシリアルケーブル。
後はLANケーブルでつないでいます
※ PC上でVMWareイメージ(CentOS)を起動してます
※ WindowsXP上でモデムクライアントを作成して、実験しています。

■環境
・PC
  WindowsXP SP2
  VMware Workstation 6.0.2
・RAS(改造mgetty)サーバー
  CentOS5.1
  pppd version 2.4.4
  mgetty-1.1.33を改造

■問題

WindowsXP標準のモデムクライアント(*1)からCentOS上の改造mgettyに
シリアルケーブルを通じてダイアルアップ接続します。

*1 http://www.inaker.or.jp/user/windows/xp/xp.html

初期化するATコマンドを一通り行なった後、モデムクライアントから
ATD(ダイアルコマンド)を改造mgettyに送り、改造mgettyから"CONNECT"
をモデムクライアントに送信します。

"CONNECT"を受信するとモデムクライアントからpppパケットを
改造mgettyに送信します。
その後mgettyでpppパケット自動検出(元々のmgetty機能)します。

※ ここまでの環境や改造は問題なく動きました

ここからが問題です。

pppパケットを検出した後、LANにそのパケットをフォーワードして、
他PCとLAN通信(TCP/IP通信)させてやりたいのですが、どのように
(環境を整えたり、ソースを変更したり)すればよいかわかっており
ません。

本来mgettyではpppフレームを受信すると、pppdコマンドをexecvで
実行して、引数で指定したシリアルポートを使用し、モデムと連携
してTCP/IP通信を試みようとすると思います。

これをシリアルポートではなくLAN(eth0)に変えLAN通信できるよう
にしたいのです。

mgettyコマンド例)
 mgetty -a /dev/ttyS0 -x9 -s 19200
       ↑
  本来ならこのシリアルポートがモデムに繋がっているイメージ。
  やろうとしている事は擬似モデムなので、このシリアルポートで
  ATコマンドを受信し、eth0を使用してLAN通信を行ないたい

pppoe通信が絡むのではないかと思い、adsl-startやらadsl-status
などを見ているのですが、どのように応用したらよいかわからない
状態です。

■mgetty改造箇所

・シリアルポートでATコマンドを待ち受けるよう、ループ制御を入れる
・シリアルポートでATコマンドを認識すると、全て"OK"を返却
・ダイアルコマンド"ATDXX"が来たら無条件に"CONNECT"を返却
・"CONNECT"返却後はPPPフレームを検出する処理に進ませる

大変お手数ですが、どなたか何かご存知であればアドバイスを頂け
れば幸いです。

不明な点やご指摘等あれば、補足致します。
すけ
会議室デビュー日: 2008/02/12
投稿数: 13
投稿日時: 2008-02-13 00:16
winからシリアル経由でCentOSには接続できていて、pppdが接続を受け付け
ており、IPアドレスも割り当てられてるってことですよね?
であれば、あとはip foward の設定をすればいけそうな気がします。

ttyS0のIPアドレス→LAN用NICのIPアドレス の転送ができればOK
でしょう。

まずカーネルオプションの net.ipv4.ip_forward = 1 にして、
iptablesのFORWARDテーブルに転送の定義を追加すればOK

次を参考におためしあれ。
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/security-guide/s1-firewall-ipt-fwd.html
MATSU
会議室デビュー日: 2007/11/20
投稿数: 8
投稿日時: 2008-02-19 18:00
返事が遅くなり大変申し訳ありません。

ご指摘頂いたアドバイスをもとに、
net.ipv4.ip_forward = 1 にして、
iptablesのFORWARDテーブルに転送の定義を追加したところ
見事転送することができました!!!

ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)