Jan 06, 2008

さらにKuro-NetBSDネタ [computer]

KUROBOXのNetBSD pfのnat問題

玄箱のNetBSDでpfのNATが動かない件を先日書いたが、これは単純な操作上のミスが原因だった。

  # pfctl -e

でpfの機能を有効にしないとNATもフィルタも動かない。起動スクリプトから動かした場合は # /etc/rc.d/pf startすれば内部的に有効にされるので問題ない。 FreeBSDでは初期状態で有効になっていたかな?


FTPではやっぱり問題

pfのnatを使う場合に悩ましいのがFTPの扱い。ftp-proxyを動かしてこちらにリダイレクトする形で対応するのが一般的だがNetBSD4.0で導入されているpfのコードは少々古く、inetd経由でftp-proxyを動かす必要がある。

/etc/inetd.conf

127.0.0.1:8021 stream tcp nowait root  /usr/libexec/ftp-proxy ftp-proxy

/etc/pf.conf
rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021
としてみたが内部からftpを行うと接続を切られてしまう。 ipfilterのipnatの部分だけ動かしてみたらこのあたり問題なく動作するようなので少々キモいがpf(フィルタ部分)+ipnatで使ってみることにする。
/etc/ipnat.conf
map pppoe0 192.168.0.0/24 -> 0/32 portmap tcp/udp 20000:60000
map pppoe0 192.168.0.0/24 -> 0/32 

namedの謎

named(bind9)を動かしてみると...固まる。 デーモンプロセスになる前に固まるようで、手動で起動しても帰ってこない。 デバッガで比較的簡単に追いかけられそうな問題だとは思ったが、 pkgsrcからbind9をインストールしたらこちらは問題なく動くのでこちらを使うことにして特に追いかけないことにする。

何とか使えるところまで来たかな...


(追伸) namedの配布ソースに含まれるファイルの一部に各種アーキテクチャを考慮していないものがあるのが問題らしいと、ある方からメールで教えていただきました。 このファイルは元々configureで生成されるファイルで、pkgsrcではconfigureを使用して生成するため問題が解消されるとのことです。

メールありがとうございました。


(余談)シンボルテーブル問題

不具合について調べていて見つけた話。カーネルオプションを増やすとカーネルサイズの問題だけではなくシンボルテーブルがあふれる場合もある。 この場合、カーネルのコンフィギュレーションファイルのパラメータでシンボルテーブルの値を増やす必要がある。

options         SYMTAB_SPACE=288344  
http://gazoo.com/G-Blog/BlogTaikenshitemimas/28795/Article.aspx
Posted at 19:27 in computer

Jan 05, 2008

はまり中 [computer]

このところこのネタばかりで本人的には不満

先日書いた内容に修正入れたとおりLKMは動いていない。

また、PFで

nat on $ext_if from $internal_net to any -> ($ext_if)
というような設定を入れてみたがtcpdumpで確認したところどうも アドレスの書き換えが行われていないようだ。 外側への接続はできない(戻りのパケットが届かんもんね)。

ipfilterで我慢するか、pf+ipfilterというミニマリストには少々気持ち悪い手段を使うか...

色々オプションをつけてカーネルを構築するとnbloaderの制限に引っかかる場合も。

  • カーネルサイズは最大4190208バイト(4*1024*1024 - 4096)

Posted at 01:58 in computer

Jan 02, 2008

NetBSD玄箱でプロバイダ接続 [computer]

pppoe

かわうちさんの所http://www5.atwiki.jp/kuro-bsd/にあるNetBSDのサンプルカーネルではpppoeの機能は組み込まれている。

NetBSDでのpppoeのやり方は NetBSDのページのドキュメント、前川さんのこちらのページなどに十分な情報がある。これらのページを参照すれば特に問題なく接続はできる。

pfとカーネル再構築

サンプルカーネルではipfilterが使用可能な状態になっている。pfを使いたい場合はmodloadでモジュールをロードすれば使える。(1/4 サンプルカーネルではカーネルモジュールは有効になっていないのでmodloadは使えない。また、sandpointではカーネルにLKMオプションをつけて構築するといくつか未定義のシンボルがある旨のエラーが出る。モジュールは使えない可能性も) ただし、ALTQを使いたい場合はカーネルの再構築が必要。

pfをメインで使うつもりなのでカーネルの再構築を行うことにする。 ソースはftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-4.0/source/sets/からsyssrc.tgzを持ってきてかわうちさんのNetBSD-4用のパッチ20070923.netbsd-4.diff.bz2を当てたものを使った。

セルフコンパイルする場合は/usr/src以下にソースを展開して

  # cd /usr/src/sys/arch/sandpoint/conf
  # config KUROBOX
  # cd ../compile/KUROBOX
  # make depend; make
で玄箱用のカーネルバイナリイメージ netbsd.binを作ってくれる。 NetBSD 4.0のpfは本家のOpenBSDのpfやFreeBSDのpfより微妙に古いようだが 設定方法についてはOpenBSDやFreeBSDのドキュメントを読めば充分使える。 FreeBSDで使っていた設定がネットワークインターフェースの変更ぐらいで 使えるようなのでありがたい。

full build

結局のところカーネルが4.0RC3から4.0へ変わってしまったのでユーザランドも 入換えようと思った。NetBSDのfull buildは配布のソースコードを展開して ソースディレクトリで

  # make buildworld
  # make installworld
でいいのだが、セルフコンパイルを試したところ数時間たってもlibcのビルドが終わらない。ppc603e, 266MHzというと今のGHz級IA-32機の1/10程度の性能なので致し方ないか。 配布のバイナリを使ってインストールしなおした。

ついでなので特に意味はないがC2DのFreeBSD機上でクロスビルドを試してみた。 ソースコードを適当な所に展開し、展開したディレクトリ上でクロスコンパイル 用のツールを作成する

  % ./build.sh -u -m sandpoint tools
   :
   :
===> Summary of results:
         build.sh command: ./build.sh -u -m sandpoint tools
         build.sh started: Wed Jan  2 20:39:03 JST 2008
         NetBSD version:   4.0
         MACHINE:          sandpoint
         MACHINE_ARCH:     powerpc
         Build platform:   FreeBSD 7.0-PRERELEASE i386
         HOST_SH:          /bin/sh
          :
         DESTDIR path:     /usr/local/src/netbsd/sandpoint
         RELEASEDIR path:  /usr/local/src/netbsd/usr/src/obj/releasedir
   :
リリース形式でユーザランドをビルドしてみる
  % ./build.sh -u -U -m sandpoint release
20分程度で終わった...

Posted at 21:37 in computer