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=288344http://gazoo.com/G-Blog/BlogTaikenshitemimas/28795/Article.aspx
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)
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 release20分程度で終わった...