FreeBSD QandA 2001年3月7日 更新分

QandA
QandA Project
登録・更新 QandA 一覧

管理番号 213 (更新) 更新履歴
Q. ppp(8) の自動モード (-auto や -ddial) を終了させるには、どうすればいい
   のでしょうか?

A. /etc/ppp/ppp.conf の該当セクションに、

     set server /var/tmp/internet "" 0177

   という行を追加しておいて、コマンドラインから

     % pppctl /var/tmp/internet 'close; quit all'

   とします。そのほか応用の仕方が pppctl(8) に載っています。

   複数の tun(4) デバイスを同時に使う場合、FreeBSD 2.2.8-RELEASE 以降で
   あれば `set server' で指定したパスに %d を含めると、それが tun デバイスの
   ユニット番号に置換されます。即ち、

     set server /var/tmp/loop%d "" 0177

   このとき tun2 を使っているとして、

     % pppctl /var/tmp/loop2 'close; quit all'

   となります。ただし FreeBSD 2.2.5-RELEASE 以前では、
     o telnet で localhost の "3000 + tunデバイス番号" に接続して、
     o pass "ppp.secret で設定したパスワード"
     o quit all とすると終了します。
   tun0 を使用している場合は具体的には以下のようになります。

     % telnet localhost 3000
     % ppp on hogehoge> pass XXXXXX
     % ppp ON hogehoge> quit all

   この方法では Internet 側からのアクセスも可能である点に注意してください。
   アクセス制限については [管理番号 678] も参照してください。


管理番号 678 (更新) 更新履歴
Q. ppp(8) コマンドを auto モードや ddial モードで起動したときに、診断ポート
   (3000/tcp) への Internet 側からのアクセスを拒否したいのですが、どうす
   ればいいのでしょうか?

A. TCP ソケットを使う必要がないのならば、LOCAL ドメインソケットを使うよう
   に変更する方法があります。これならば、外部からの直接アクセスは自ずとで
   きなくなります。/etc/ppp/ppp.conf の該当セクションで、`set server' 行を
   探して、

     set server /var/tmp/internet "" 0177

   などのように変更します。アクセス方法は pppctl(8) コマンドを使って、

     % pppctl /var/tmp/internet

   とすればあとは今までと同じです。

   何かの理由で TCP ソケットを使わなければならないのであれば、ppp(8) のパ
   ケットフィルタリングを使って、外部からのアクセスを拒否するようにしてく
   ださい。次のような設定を ppp.conf の該当セクションに追加すればよいでしょう。

     set filter in <rule-no> deny 0 MYADDR tcp dst eq <port-no> (3.3R以降)
     set filter in <rule-no> deny tcp dst eq <port-no>        (2.2.8R以降)
     set ifilter <rule-no> deny tcp dst eq <port-no>          (2.2.7R以前)

   ここで、<rule-no> はフィルタのルール番号、<port-no> は `set server' 
   で指定したポート番号です。詳しくは ppp(8) のマニュアルを参照してください。


管理番号 390 (更新) 更新履歴
Q. ppp(8) を対話モードで起動して、ppp プロンプトから "dial セクション名"
   として接続すると、回線はつながるのですが 5 秒で切断されてしまいます。

A. /etc/ppp/ppp.conf にて、そのセクションの最後で "dial" を指定していませ
   んか?

   ppp.conf に dial が指定してあると、対話モードでの dial コマンド実行時に、
   もう一度 dial コマンドを実行しようとして、2回目の dial コマンドの失敗
   により、回線が切断されてしまいます。

   切断までの時間が 5 秒なのは、ppp.conf の default: セクションで、
     set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" ATE1Q0 OK-AT-OK
   と書いてあるからです。                           ^^^ここ
   (既に1回目の dial コマンドでモデムはデータモードに入っているから、AT
   コマンドに応答するはずがない)

   ppp.conf に dial 指定をした場合には、
     ・コマンドラインからの ppp 起動時に引数でセクション名を指定する。
     ・対話モードの ppp プロンプトで "load セクション名" と入力する。
   のいずれかの方法を使いましょう。


管理番号 343 (更新) 更新履歴
Q. ppp(8) を利用して手動で PPP 接続を行ったところ、 プロンプトが小文字の
   ppp から大文字の PPP に変わって接続は出来ているようなのですが、ping 
   コマンドを実行しても応答が返って来ないのですが?

A. PPP での接続自体は正常に行われているのですが、 デフォルト経路
   (default route) が設定されていないため、パケットが相手に届いていないよ 
   うです。具体的には、プロンプトに対して以下のコマンドを入力します。

     add default HISADDR

   既にデフォルト経路が存在する場合は、

     add! default HISADDR

   とすれば上書きできます。ここで HISADDR が PPP サーバの IP アドレスに置
   き換わります。最近の ppp(8) のバージョンでは、これらの一行を 
   /etc/ppp/ppp.conf の該当セクションに追加することで、接続後に自動的にデ
   フォルト経路を書き換えてくれます。

   FreeBSD 2.2.7R 以前では、上記の代わりに以下のコマンドを使用します。

     delete ALL
     add 0 0 HISADDR

   この設定は、/etc/ppp/ppp.linkup ファイルに記述しておけば、接続後自動的
   に設定できます。


管理番号 763 (更新) 更新履歴
Q. 速いマシンを使っているのに、なぜか emacs や mule を起動すると
   10秒ほど待たされてしまいます。

A. emacs や mule は、起動時に hostname(1) で得られるホスト名
   から IP アドレスを引こうとします (逆引きしようとする)。

   /etc/hosts を見て解決できない場合、ネットワークに接続されて
   いるマシンでは、/etc/resolv.conf に従い、DNS サーバに問い
   合わせて、自ホスト名に対応する IP アドレスを引こうとします。

   しかしインターネットに接続されていないマシンでは (例えば
   ppp 接続していない場合など)、DNS サーバに接続できず、その
   タイムアウトを待ってしまうため、10秒ほど固まってしまうのです。

   仮に常時接続マシンであっても、メンテナンス時などは network 
   unrechable な状態になりうるので、/etc/hosts に自ホストの
   エントリを記述しておきましょう。

   例えば
      % hostname
      foo.example.co.jp
   となるなら
      ::1       localhost foo.example.co.jp
      127.0.0.1 localhost foo.example.co.jp
   と /etc/hosts に記述しておきましょう。

   また、関連する項目として [管理番号 781] も参照してください。


管理番号 611 (更新) 更新履歴
Q. ppp + natd で、ネットワークに接続し直すとパケットが流れなくなってしま
   います。

A. natd(8) へのオプションに -dynamic yes は付けてありますか?

     # natd -p 6668 -n tun0 -dynamic yes

   こうしておかないと、natd が IP アドレスの変更を検出できないためです。
   FreeBSD 2.2.7-RELEASE 以降なら、/etc/rc.conf で以下のように設定すれば
   良いでしょう。

     nat_enable="YES"              # Enable natd (if firewall_enable == YES).
     nat_interface="tun0"          # Public interface or IPaddress to use.
     nat_flags="-dynamic"          # Additional flags for natd.

   また、FreeBSD 3.3-RELEASE 以降であれば、ppp と natd を組み合わせる
   よりも、ppp(8) の -nat オプションを使うことを考慮した方が良いでしょう。


管理番号 408 (更新) 更新履歴
Q. 端末型ダイアルアップ IP 接続で、LAN ごと接続出来ませんか?

A. FreeBSD 3.3-RELEASE 以降であれば、標準の ppp(8) に -nat オプションが
   追加されましたので、適切に /etc/ppp/ppp.conf に設定すれば可能です。
   詳しい設定方法については、日本語マニュアルの ppp(8) を参照してください。
   少し記述の古い部分も見受けられますが、以下の FreeBSD Tutorials も参考に
   なると思います。

     <URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/tutorials/ppp/index.html>

   それから、佐藤淳一さんの NAT パッチを利用している人は、設定方法が異な
   りますので、佐藤さんの Web ページを参照してください。

     <URL:http://configure.sh/FreeBSD/NAT/nat.html>


管理番号 781 (更新) 更新履歴
Q. ppp を -auto モードで使用しています。このとき次のような操作により、
   勝手にダイアルしてしまいます。これを抑制するにはどうすればいいですか?

     1. アプリケーションの起動時 (sendmail、mule など)
     2. 夜中の 2 時頃 (netstat -r)
     3. 要は DNS への問い合わせ全般

A. 一般的に on-demand dialup では、DNS サーバへの参照をトリガーとしてダイ
   アルします。特に FreeBSD 2.2.7-RELEASE までは /etc/host.conf の設定が、

     bind
     hosts

   の順序になっているため、必ず DNS への問い合わせが行われるという問題が
   ありました。これは次のように変更すれば、/etc/hosts が優先されるように
   なります。

     hosts
     bind

   更に、/etc/rc.conf (2.2.1-RELEASE より前は /etc/sysconfig) での、
   hostname 変数に指定したホスト名を、/etc/hosts に登録する必要もあります。
   すなわち、hostname(1) コマンドの結果が `myhost.domain.jp' なら、

     127.0.0.1      localhost localhost.domain.jp myhost.domain.jp

   または、ネットワークインタフェースが使えるなら、その IP アドレスを使って、

     127.0.0.1      localhost localhost.domain.jp
     192.168.0.1    myhost.domain.jp myhost

   などのようになります。ここまでの設定は必須事項で、これをしてないがため
   に、アプリケーション起動のたびに PPP 接続してしまったり、起動に時間が
   かかるといった現象に出食わすことになります。

   LAN 上に DNS サーバを立ち上げてないような小規模サイトでは、その LAN に
   あるそれ以外のホストについても、ホスト名と IP アドレスのペアを登録して
   おきましょう。これはこちら側から直接 telnet などするつもりがなくても、
   逆から接続されるとき、IP アドレスからホスト名を逆引きするときにも使わ
   れるからです。

   また、ppp(8) のパケットフィルタを設定すれば、DNS への問い合わせにより
   自動的にダイアルしないようにもできますが、on-demand dialup の目的から
   すると本末転倒かもしれません。もちろん設定するしないは自由ですので、ケー
   スバイケースで判断してください。

   [2.2.8-RELEASE 以降]
     set filter dial 0 deny icmp
     set filter dial 1 deny udp src eq 53
     set filter dial 2 deny udp dst eq 53
     set filter dial 3 permit 0 0

   [2.2.7-RELEASE 以前]
     set dfilter 0 deny icmp
     set dfilter 1 deny udp src eq 53
     set dfilter 2 deny udp dst eq 53
     set dfilter 3 permit 0 0

   詳しくは man ページや、/usr/share/examples/ppp/ 以下、または /etc/ppp/ 
   にあるサンプルファイルを見てください。


管理番号 1302 (更新) 更新履歴
Q. NEC Aterm シリーズの ISDN TA で、同期 64Kbps のアクセスポイントに PPP 
   接続しようと思うのですが、うまくつながりません。TA は RS-232C ポートに
   繋げて使っています。

A. 同期 64Kbps のアクセスポイントに接続するためには、「非同期/同期 PPP 変
   換をする」という設定にする必要があります。Aterm シリーズの ISDN TA で
   は、AT コマンドで AT$N1=1 とすればこの設定ができます。

   また、チャットスクリプトの段階で失敗するなら、\\d (2 秒待つ) を付加する
   ことで接続に成功するかもしれません。

   AtermIT40、AtermIT45、AtermIT55 では、次のチャットスクリプトでの接続が
   確認されています。途中で改行していますが、実際は一行に続けて記述します。
   なお、Aterm シリーズ固有の問題なのかどうかは分かっていません。

     set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT$N1=1
     OK-AT-OK \\dATE1Q0 OK \\dATD\\T TIMEOUT 40 CONNECT"

   ただし、FreeBSD 4.1-RELEASE 以降や 3.5-RELEASE 以降では、環境変数を
   使える様になった関係で、AT$N1=1 を AT$$N1=1 や AT\$N1=1 とする必要が
   あります。

     set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT\$N1=1
     OK-AT-OK \\dATE1Q0 OK \\dATD\\T TIMEOUT 40 CONNECT"


管理番号 1837 (新規) 更新履歴
Q. /etc を別パーティションにすると、 boot が正常に行えません。

A. /etc や /sbin は別パーティションにするべきではありません。

   /etc には disk の mount 情報を記述した /etc/fstab や、
   boot するための一連の手続きが書かれた /etc/rc.* があり、
   /sbin には disk を mount するコマンドが格納されています。

   もし /etc を別パーティションにしてしまうと、「金庫の鍵は
   金庫の中」状態になってしまいます。また、
     - /etc や /sbin が必要とするディスク容量はさほど大きく
       ない (FreeBSD 4.2-RELEASE でそれぞれ 700KB、10MB 程度)
     - 更新されることがほとんど無い
   という点を考えると、独立したパーティションにするほどの
   メリットは見あたりません。

   デフォルトで / に存在するディレクトリについては、/usr、
   /var、/tmp 以外は別パーティションにしないほうがよいでしょう。


管理番号 290 (更新) 更新履歴
Q. DES って何ですか?

A. Data Encryption Standard の略で、データの暗号化アルゴリズムと、それを
   実装しているシステムファイル及び、もっと一般的には Unix 全般のログイン
   パスワードの記録形式の事を意味します。

   Sun などのような、password の暗号化に DES(ここでは algorithm を示しま
   す)を使用している OS を NIS server とする場合、password を照会する時
   に暗号化の方式に互換がないと認証できませんので、DES(ここでは FreeBSD 
   のファイル)を install する必要があります。しかし、安全性の面から言え
   ば FreeBSD 標準の MD5 形式よりも低いくらいで、現在の Internet 経由の
   リモートログインでは、もっと強力な暗号化アルゴリズムを搭載した SSH な
   どのプロトコルを使う事が推奨されます。

   ややこしい事に、DES にはアメリカ合衆国の輸出規制問題がつきまといます。
   幸いなことに 4.1.1-RELEASE 以降では、FreeBSD はこの問題を法的にクリア
   したため、標準のリリースに DES を含めて全ての暗号化機能が含まれます。

   実際は DES については 3.5.1-RELEASE で問題なく公開できるようになったの
   ですが、RSA についてのアメリカ国内での特許問題もからみ、4.1.1-RELEASE
   から一般の配布ファイルと同等の扱いとなりました。しかしそれより前の
   リリースでは、アメリカ国内にある FreeBSD オリジナルの配布はできず、
   そのため「US 版」と「国際版」が存在しました。

   こういった歴史的な事情は、次の文書に詳しく書かれています。

     FreeBSD ハンドブック「8. セキュリティ」
     <URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/handbook/security.html>


管理番号 291 (更新) 更新履歴
Q. DES が置いてある FTP サイトを教えてください。

A. おそらくアメリカ合衆国の輸出規制に関連しての質問だと思いますが、現在の 
   FreeBSD は暗号関連の問題をクリアしましたので、通常の FTP サイトから
   ダウンロードしたので差し支えありません。以前のような「国際版」という
   区別はありませんので、普通に次の Web ページにあるミラーサイトを利用し
   てください。

   <URL:http://www.jp.FreeBSD.org/mirror.html>
   <URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/handbook/mirrors-ftp.html>


管理番号 292 (更新) 更新履歴
Q. DES のインストールの方法を教えてください。

A. ここではバイナリ配布ファイルからのインストール方法に話を絞ります。
   まず、FreeBSD の暗号化関連の取り扱いについては、4.1.1-RELEASE で
   大きな変更がありました。これについては、[管理番号 290] 及び
   [管理番号 291] を参照してください。

   DES を含む配布ファイルは、4.0-RELEASE 以降ではそれまでの des/des.?? から 
   crypto/crypto.?? に変更されていて、新たに追加された OpenSSL や OpenSSH 
   も同じ配布ファイルに含まれます。また、インストーラの Distoributions メ
   ニューでも、3.5.1-RELEASE までは DES → des、4.1-RELEASE までは CRYPTO →
   crypto、そして現在では単に crypto を選択するだけとなっています。

   項目の選び方については、以下の [X] マークを参考にしてください。なお、
   4.1.1-RELEASE 以降では、Minimal 以外の配布セットを選べば自動的に
   マークされます。最後にインストール後の設定方法については、[管理番号 345]
   を見てください。

   [3.5.1-RELEASE までの DES サブメニュー]
     [X]  des       Basic DES encryption services
     [ ]  krb       KerberosIV authentication services
     [ ]  skerbero  Sources for Kerberos
     [X]  ssecure   Sources for DES
     [X]  scrypto   Export controlled crypto sources

   [4.1-RELEASE までの CRYPTO サブメニュー]
     [X]  crypto    Basic encryption services
     [ ]  krb4      KerberosIV authentication services
     [ ]  krb5      Kerberos5 authentication services
     [ ]  skrb4     Sources for KerberosIV
     [ ]  skrb5     Sources for Kerberos5
     [X]  ssecure   BSD encryption sources
     [X]  scrypto   Contributed encryption sources

   [4.1.1-RELEASE からの Distributions メニュー]
        (インストール時のメニューでは、配布セットを選ぶメニューで
         Custom を選択すると表示されます)
     [X]  crypto    Basic encryption services
     [ ]  krb4      KerberosIV authentication services
     [ ]  krb5      Kerberos5 authentication services

   [4.1.1-RELEASE からの src サブメニュー]
     [X]  scrypto   /usr/src/crypto (contrib encryption sources)
     [ ]  skrb4     /usr/src/kerberosIV (sources for KerberosIV)
     [ ]  skrb5     /usr/src/kerberos5 (sources for Kerberos5)
     [X]  ssecure   /usr/src/secure (BSD encryption sources)


管理番号 345 (更新) 更新履歴
Q. 確かに DES をインストールしましたが、/bin/passwd でパスワードを変更
   してもパスワードファイルは MD5 のままなのは何故でしょう?

A. FreeBS 4.1.1-RELEASE 以降では、DES は配布ファイルの crypto に含まれる
   ようになりましたが、ただ crypto をインストールしただけでは、passwd(1)
   コマンドを使っても DES に変更されません。/etc/master.passwd に記録
   されるパスワードを DES に変更したい場合は、/etc/login.conf の `default'
   クラスに、

           :passwd_format=des:\

   という行を挿入して cap_mkdb /etc/login.conf します。最後の `\' 記号は
   継続行を意味します。このあとで passwd コマンドを使用すれば、パスワード
   は MD5 から DES に変更されます。以前のようにパスワードの先頭が `$1$' 
   になっているかどうかに関わらず無条件に変更してしまいますので、もし MD5 
   でなければ困るユーザがいる場合は以下のようにしてください。

   逆に特定のユーザだけ MD5 または DES を使うようにするには、passwd(5) の 
   5 番目のフィールドに任意のログインクラスを指定し、login.conf(5) には

   xuser:\
           :passwd_format=des:\
           :tc=default:
   staff:\
           :passwd_format=md5:\
           :tc=default:

   などのようにします。

   それより古いバージョンの FreeBSD では、passwd コマンドはそれまで記録さ
   れていた形式を常に保存します。このためパスワードを DES に変更するには、
   vipw(8) を使ってパスワードフィールドを空にしてから、改めて passwd コマ
   ンドを使います。


管理番号 941 (更新) 更新履歴
Q. 他の UNIX で使用していた passwd file と passwd を、そのまま FreeBSD
   で使用できますか?

A. SunOS のように、DES という暗号方式で passwd を格納している場合には、
   多少の変更で使用できます。(現在の UNIX では、DES 方式がまだまだ多い)
   まず、FreeBSD (標準では MD5 で暗号化) を DES が使用できるようにする
   必要があります。また、SunOS と FreeBSD とで passwd file の field 構成
   が少し違いますので調整する必要があります。

    1. /stand/sysinstall などを使用して DES をインストールする。
       インストール方法については [管理番号 292] を参照してください。

    2. SunOS の "/etc/passwd" を "/tmp/passwd" などにコピーしておき GID の後
     ろに "::0:0"を追加する。たとえば awkを使用する場合は次のようにする。

       cat /etc/passwd | awk 'BEGIN{FS=":" } \
        {printf("%s:%s:%s:%s::0:0:%s:%s:%s\n",$1,$2,$3,$4,$5,$6,$7)}'\
         > /tmp/passwd

    3. "/tmp/passwd" を FreeBSD 側にコピーし、vipw を起動して"/tmp/passwd"
       を今の FreeBSD の passwd の後ろに追加し、uid の重複や、shell や、
       home の path 等を修正/確認した後セーブする。

    4. パスワードの記録形式を DES に変更する。
       変更方法については [管理番号 345] を参照してください。

   以上の操作によって、他の UNIX で使用していた passwd をそのまま FreeBSD 
   で使用できます。


管理番号 24 (更新) 更新履歴
Q. FreeBSD では PC Card (PCMCIA) が使えますか?

A. FreeBSD のバージョンによって対応状況が異なりますが、まず 16-bit PC Card
   については、4.0-RELEASE から徐々に PAO からのマージが進みましたので、
   最新の 4.x ではそれまでの PAO を併用した場合と比べ、それほど遜色ない
   程度にはサポートされるようになっています。それに対して 32-bit CardBus
   PC Card については、NEWCARD という現在開発中の機能を使うことで利用でき
   るものもありますが、まだ広く一般にお勧めすることはできません。

   FreeBSD 2.2.x や FreeBSD 3.x では、FreeBSD 標準では PC Card サポートが
   貧弱ですから、PAO <URL:http://www.jp.FreeBSD.org/PAO/> を使ってください。


管理番号 1854 (新規) 更新履歴
Q. FreeBSD(98)で STABLE/CURRENT を make world するにはどうすれば
   いいですか。

A. 少なくとも FreeBSD ハンドブック
     <URL:http://www.jp.FreeBSD.org/www.FreeBSD.org/ja/handbook/>
   の「make world」関連は熟読するようにしてください。

   その上で、
     1. CVSup などでソースツリーをダウンロード
     2. FreeBSD(98) 配布物中の該当リリースバージョンから 98src/patches.tgz
        を展開
     3. パッチを当てる (cd /usr/src; patch -p < hoge.diff >& hoge.log)
     4. パッチログを確認し、reject があればオリジナルソースを手動で修正
     5. make buildworld & make installworld で無事を祈る
   という手順を踏んで下さい。

   PC98 用の FreeBSD は、FreeBSD(98) 移植チームがパッチを当ててリリース
   しています。当然 STABLE/CURRENT には、PC98 用のソースコードは含まれて
   いません (将来的には変更の可能性あり)。

   したがって、STABLE/CURRENT を make world するには、上記 2・3 の通り、
   自分で PC98 用のパッチを当てる必要があります。

   しかし、STABLE/CURRENT は時々刻々と変化するものであり、上記 2 の
   パッチがそのまま当たるとは限りません。できるだけ最新のリリース
   バージョンからパッチを取得し、上記 4 を行うだけの気力が必要です。


管理番号 1857 (新規) 更新履歴
Q. ネットワークに関する情報を得るにはどうすればいいのでしょうか?

A. netstat(1) を使います。netstat はオプションによって全く違う出力を
   行いますので、それぞれの簡単な使い方を覚えておくといいでしょう。

     - TCP の再送状況を知る
         % netstat -s -p tcp

     - mbuf の状態を報告する
         % netstat -m

     - インタフェースの一覧と統計を見る
         % netstat -i

     - routing table の状態を知る (現在のデフォルトゲートウェイを確認する)
         % netstat -r

     - サーバプロセスが使用しているソケットも含め、全ソケットの状態を表示
         % netstat -a
       このサーバにポート 80 を LISTEN しているサーバはいるのかな?
       というときは
         % netstat -a | grep 80

       また、あるポートを使用しているのはどのプロセスかを知るには
       [管理番号 800] を参考にしてください。


QandA
QandA Project
登録・更新 QandA 一覧