--- [管理番号 36] (最終更新 1999/08/26 00:24:04) Q. FreeBSDで NAT、IP masquerade のような IPアドレス・ポート変換が できますか? A. モデムや ISDN を使ったダイアルアップ環境での NAT、LAN カードを 使った常時接続での NAT、どちらもできます。 LAN環境: BSD 系全般で共通の IP_Filter を使う方法と FreeBSD 固有の natd を 使う方法があります。 IP_Filter はいわばカーネルモードで変換を行います。 以下のURL が参考になるでしょう。 FreeBSD の中に IP_Filter のインストールページがあります。 natd はユーザモードで変換を行います。FreeBSD に標準で用意されています。 マニュアルの情報で簡単に設定できるでしょう。(natd、ipfw) ダイアルアップ環境: ppp コマンドの -alias オプションにより、PacketAliasing 機能を 使うことができます。HTTP、FTP、SMTP などが利用可能になります。 しかし、archie、rlogin、RealAudio、Diablo、X プロトコル、 CU-SeeMe などのプロトコルは使うことができません。 その場合、ppp に NAT patch を当てる必要があります。 これは、PacketAliasing 機能の拡張ではなく、全く別の NAT 機能を 追加するパッチです。 --- [管理番号 197] (最終更新 1999/02/17 23:58:45) Q. IP firewallの設定がよーわかりません。 A. kernelの設定ファイルに options IPFIREWALL このオプションを付けると、全てのパケットを通さない設定になります。 こうしてから、/etc/rc.conf (/etc/sysconfig)の firewall="NO" # Set to firewall type or NO for none. この変数を「NO」以外、とりあえず「open」とか「client」あたりに変更しま す。この変数は /etc/rc.firewallで見ていますので この rc.firewallを読ん でみましょう。あとは、man ipfwして頑張りましょう。 --- [管理番号 203] (最終更新 1999/02/17 23:58:45) Q. ipfwを使うためにkernelを再構築してrebootしたら、networkがうんともす んとも言わなくなりました。 A. kernelの再構築でipfwを有効にした場合は、rebootの前に次の設定をして おくといいでしょう。 /etc/sysconfig (2.2.1以前) で firewall="YES" /etc/rc.firewall で firewall_type=open これで、ipfwの有効化以前と同じにpacketが通るようになります。 あとはhandbookなどを参考にして、rc.firewallに適当な設定をしてください。 --- [管理番号 211] (最終更新 2001/01/08 04:31:13) Q. ppp (iij-ppp) への nat-xxxx.patch のあて方と、インストールのしかたを 教えてください。 A. FreeBSD 3.3R 以降の ppp(8) には、既に NAT 機能が含まれています。また、 いまだに FreeBSD の ppp(8) の事を iij-ppp と呼ぶ人がいますが、現在では 大幅に書き換えられたため元の iij-ppp とはかなり異ります。それ以前の RELEASE の FreeBSD を使っているのならば、可能ならシステムのアップグレー ドをお薦めします。もし、どうしても古いシステムのまま、ppp だけを NAT に対応させる事も不可能ではありませんが、恐らく茨の道を覚悟しておいてく ださい。 1. まず使用中の FreeBSD のソース (usr.sbin) を CD-ROM などから インストールして下さい。 # mount /cdrom # cd /cdrom/x.x-RELEASE/src # sh install.sh susbin 2. 次に佐藤さんのホームページから nat-******.patch を入手します。 ****** には、nat patch のバージョン (日付け) が入ります。目的の FreeBSD 用のものをダウンロードしてください。 改行コードの問題などがあるのでダウンロードには気をつけてください。 FreeBSD の Netscape からだと右クリックして Save Link as でダウンロード。 Windows95 のブラウザだと名前を保存して、FreeBSD に移す際に Ascii Text) モードで転送する事。 3. 無事にダウンロードできたらパッチを当てます。 # cd /usr/src/usr.sbin # patch -p < /tmp/nat-******.patch 4. 新しい ppp をコンパイルしてインストールします。 # cd /usr/src/usr.sbin/ppp # /usr/src/usr.sbin/ppp に移動 # make # コンパイルします。 # make install # インストールします。 これで完成です。ppp は、オリジナルを上書きする形で、/usr/sbin に インストールされます。 --- [管理番号 310] (最終更新 1999/02/17 23:58:45) Q. IPFWを組込んだ(つもりの)kernelでブートすると、以下のようなエラー メッセージが出てしまう。 ipfw getsockopt(IP_FW_GET): Invalid argument A. kernelのconfigurationで以下の点を確認してみて下さい。 options IPFIREWALL <----必ず必要 options IPFIREWALL_VERBOSE <----ログを出す時に必要 (注意)2行目だけでは、IPFWを組込んでくれません。 --- [管理番号 686] (最終更新 1999/02/17 23:58:45) Q. NAT 機能付の iij-ppp で LAN を Internet に繋げています。その iij-ppp の走ってるサーバーに LAN 上から telnet した時もダイアルしてし まうのですが、ダイアルしないようにできませんか? A. telnet する時に名前から IP アドレスへの変換やその逆変換をするために 外部の DNS を呼んでいることが考えられます。そうだとするとローカルで変 換できれば、ダイアルしなくなります。 telnet するときに接続先を IP アドレスで指定したときと名前で指定したと きにダイアルするかどうか調べてください。 1. 名前で指定したときにダイアルするならば... クライアント側の /etc/hosts ファイルや、ローカルの DNS で名前から IP アドレスに変換できるように設定されているか確認してください。 hosts ファイルに問題がなく /etc/resolv.conf ファイルに LAN 上にない DNS のアドレスがあるときには、DNS サーバを呼ぶ前に hosts ファイルを使っ て変換するように /etc/host.conf ファイルを書き変える必要があります。 host.conf ファイルの bind より前の行に hosts という記述を加えます。 2. IP アドレスで指定したときにダイアルするならば... サーバー側での /etc/hosts ファイルと /etc/host.conf ファイルを確認して ください。サーバーは、接続元の記録のためにクライアントの IP アドレスか ら名前への変換をしようとします。 3. どちらの時にもダイアルするならば... サーバとクライアントの両方の設定を確認してください。 tcpdump(1) などを使って LAN 上に流れるデータを監視すると、ダイアルする トリガーとなるデータを推測できます。 --- [管理番号 754] (最終更新 1999/02/17 23:58:45) Q. natd で構築したプライベートネットワーク内から send-pr すると stat=Deferred: 451 ... Domain does not resolve という メッセージが出て、メールが配送されません。何が悪いんでしょう? A. これは FreeBSD の send-pr を受け付けるメールハブ hub.FreeBSD.org が envelope の送信者アドレスをチェックして受け取ったバグレポートが信頼 できる配信元から送られているかどうかを見ているためです。 おそらく DNS の hoge_domain に対する MX レコードが設定されていない ために 宛のメールは届かないため、いわゆる「不審な メール」として処理されたものと思われます。 send-pr されたマシンからのメールの envelope from が外部ネットワーク から届くアドレスになるように設定を行ってください。 --- [管理番号 775] (最終更新 1999/02/17 23:58:45) Q. ipfw でパケットフィルタリングファイアウォールを構築しようとして rc.conf に firewall_enable="YES" firewall_type="/etc/firewall.conf" firewall_quiet="YES" と設定しましたが ipfw がエラーを出力してパケットを全く通して くれません。 A. [FreeBSD 2.2.6, 2.2.7] firewall_type にファイルのフルパスを指定した場合は firewall_quiet="NO" でなければなりません。 ファイル名を指定した場合に ipfw のルールの表示を抑止 したい場合にはルールファイルの各行毎に -q を入れてやる 必要があります。 --- [管理番号 789] (最終更新 1999/02/17 23:58:45) Q. natd + qmail でプライベートネットワーク内のメイルサーバへメールを配 送しようとしています。ところが、プライベートネットワーク内から外へメー ルできるんですが、外から内へはメールできなくて hoge@hoge_domain... Deferred: Operation timed out with pis.toba-cmt.ac.jp. というエラーメールが返ってきます。何がいけないんでしょう。 A. これは MTA が MX を引いた後、natd マシン上で TCP の 25 番で相手と通 信したけれど相手にしてくれるプログラムがいなかった時のメッセージです。 natd では divert ソケットと共に用いてマシンに入ってくるパケットについ ては指定された変換テーブルに従ってプライベートアドレスに変換し、外部へ のパケットについては発信元 IP アドレスを現在のマシンのものにするという 変換を行います。したがって、natd は外部からきたパケットについてはいわ ば関所のような働きをするわけで、このとき通行手形にあたるものが変換テー ブルとなるわけです。通常変換テーブルは -redirect_port や -redirect_address でユーザが指定したものです。ただし、-deny_incoming を no にするとユーザ指定外のパケットも通してしまいますので、普通はこれ を yes にして必要外のパケットは通さないようにし、必要なものだけ -redirect_port や -redirect_address で指定します。 まずあなたの指定した natd.cf ファイルを見てください。 "-deny_incoming yes" にもかかわらず -redirect_port で 25 番ポート (こ れ SMTP の TCP ポート番号ですね :) を指定していないんじゃないですか? deny_incoming yes redirect_port tcp internal_mail_server_address:25 25 を指定してください。また、qmail を御使いですから natd マシン上では qmail コントロールファイル smtprouts の中に .internal_domain_name: :internal_mail_server_name.internal_domain_name を作っておかなければなりません。これは内部から外部へは配送できているの で大丈夫でしょう。 [参考資料: natd(8), qmail-control(5), qmail-remote(8)] --- [管理番号 1205] (最終更新 1999/04/07 06:23:17) Q. natd のプライベート側からグローバル側のマシンのディスクを mount するとアクセスに失敗することがあります。 A. mount_nfs -T host:dir dir のように TCP モードで mount してください。この時に NFS Portmap: RPC: Program not registered というエラーが出たら,TCP モードでは mount できないので、 mount -t nfs -r 1024 -w 1024 host:dir dir のように readsize と writesize を小さくして mount してください。 --- [管理番号 1243] (最終更新 1999/04/07 06:49:20) Q. NAT によって異なるネットワークに分割されている Windows 機の間で、 ファイルやプリンタの共有を行いたいのですが。 A. ファイル共有やプリンタ共有は次の要領で行います。  ・プロトコルを TCP/IP とする。  ・WINS を立ててどのマシンがどこに属しているかを教える。 (もしくは、LMHOSTS で指定する)  ・静的NAT情報を設定する。 以下に設定例を示します。ここでは、Windows におけるコンピュータ名の 解決に LMHOSTS を使い、また NAT として FreeBSD2.2.8 で IP Filter3.2.10 を用いているものとします。また、この例では、 hostA: public なネットワーク上 (123.45.67/24) の Windows 機 hostB: local なネットワーク上 (192.168.1/24) の Windows 機 とし、この2機間で共有を行うとします。 1. Windows 機で LMHOSTS を設定する。 ・hostA の LMHOSTS IPアドレス: IP filter 機 に割り当てられている public なIPアドレス ホスト名: hostB の Windows 上におけるコンピュータ名 ・hostB の LMHOSTS IPアドレス: hostA に割り当てられている public なIPアドレス ホスト名: hostA の Windows 上におけるコンピュータ名 (hostAにおける Window s上のコンピュータ名を、DNS で指定されている ホスト名と同じにしている時は、hostB の LMHOSTS を設定しなくても良い 場合がある。) 2. NAT 機で静的 NAT の設定をする。 IP Filter の場合、/etc/natrulesに、 rdr de0 123.45.67.0/24 port netbios-ssn -> 192.168.1.1 port netbios-ssn rdr de0 123.45.67.0/24 port netbios-dgm -> 192.168.1.1 port netbios-dgm を加える (192.168.1.1は hostB のIPアドレス、de0 は NAT 機の public 側の ネットワークインターフェースのドライバ)。 (投稿者の環境では、hostA、hostBいずれからでも[ネットワークコンピュータ] では相手のマシンが見えません。[スタート]-[検索]-[ほかのコンピュータ] とし、さらに相手のコンピュータ名を明示して検索することで、相手を 見ることが出来ます。) --- [管理番号 1646] (最終更新 2002/08/24 06:22:40) Q. FireWall を構築しました。破棄 (deny) したパケットの log を取りたいので すが、どのようにすればよいでしょうか? A. 次のオプションを含めてカーネルを構築してください。 options IPFIREWALL_VERBOSE options "IPFIREWALL_VERBOSE_LIMIT=30" オプションの詳しい解説はファイル「/usr/src/sys/i386/conf/LINT」を読ん でください。 次に、rc.firewall に記述している ipfw のルールに 「log」を追加してくだ さい。 例えば次のようなルールを記述していたら、 $fwcmd add 65000 deny all from any to any 「deny」の次に「log」という引数を追加してください。 $fwcmd add 65000 deny log all from any to any 記述したら reboot してください。 成功したら次のようなメッセージが console に表示されます。 ipfw: 65000 Deny P:2 123.456.789.012 224.0.0.2 out via mx0 ipfw: 65000 Deny ICMP:9.0 123.456.789.012 224.0.0.1 in via mx0 以上は FreeBSD 3.4-RELEASE にて確認されました。 以下の参考文献を参照してお使いのシステムに当てはまるかどうか確認して下さい。 参考文献: ipfw(8) FreeBSDハンドブック 「6.4 ファイアウォール」 ファイル 「/usr/src/sys/i386/conf/LINT」 --- [管理番号 1781] (最終更新 2001/02/18 15:26:53) Q. FreeBSD 4.2R を使用しています。ipfw を使い Firewall を構築しています。 「/etc/rc.firewall」に独自のルールを記入して、手動で # sh /etc/rc.firewall と実行するとエラーにならないのですが、起動時に自動的に実行させようとす ると ipfw がエラーになり、ルールが追加出来ません。なぜでしょうか? A. 可能性の一つでしかありませんが、ipfw(8) のルールにIPアドレスではなく、 ホスト名を使っていませんか? 例: ${fwcmd} add pass tcp from any to www.tomoeda.ac.jp http ^^^^^^^^^^^^^^^^^ ホスト名。 ホスト名は使わずにIPアドレスで書いてください。 ${fwcmd} add pass tcp from any to 192.168.0.100 http どうしてもホスト名で書きたい場合は、/etc/hosts に該当ホストを記入して ください。起動時に /etc/rc.firewall が実行される時点では、ネットワーク のセットアップがまだ終わっていないので DNS は使えません。 --- [管理番号 2341] (最終更新 2003/05/17 21:39:22) Q. 複数の ISP と契約し、FreeBSD をルータとして接続した時にルーティングが うまく行きません。 ISP0 ISP1 | | | | |if0 |if1 +-------------+ | FreeBSD Box | +-------------+ 上記のような構成で、Default Gateway を ISP0 側に設定しました。この状態 で外部ネットワークからアクセスすると ・if0 に振っている IP アドレスにアクセスすると問題なくつながります。 ・if1 に振っている IP アドレスにアクセスすると繋がりません。 Default Gateway を ISP1 側に設定して外部ネットワークからアクセスすると ・if0 に振っている IP アドレスにアクセスすると繋がりません。 ・if1 に振っている IP アドレスにアクセスすると問題なくつながります。 最初の構成に戻して tcpdump(1) で調べたところ外部ネットワークから if1 に 振っている IP アドレスにアクセスすると、戻りのパケットが if0 から送出し ているのが確認できました。どうやら、if1 のアドレスは ISP0 でフィルター されているようです。 if1 にアクセスされたときに if1 からパケットを送出するようにするにはどの ようにすれば良いのでしょうか 。 A. ipfw(8) の fwd をつかって下さい。Default Gateway が ISP0 に向いている場合、 # /sbin/ipfw fwd {ISP1 Gateway address} from {if1 のアドレス} to not {if0のネットワークアドレス} とすれば if1 へのアクセスの戻りのパケットは ISP1 に向かって送出される ようになります。 なお ipfw の使い方に関してはハンドブックや ipfw(8) などご参照下さい。