« 2007年11月 | メイン | 2008年1月 »

2007年12月29日

A8N-E チップセットファン交換

「A8N」と「爆音」でググルとわかるんですけど、
このマザーのチップセットファンがとてつもない粗悪品でして、数ヶ月で軸ズレを起こし爆音化するという代物です。
ケースをどつくと、軸が戻って静かになったりするんですが、リスクが高すぎます。

まぁ、騙し騙し使っていたんですが、さすがにいかんだろということで交換です。

チョイスしたのはAINEX CB-3845BLツクモの通販でコミコミ1663円。
最初はジャンクの山からフィンとファンを加工して取りつけようと思ったんだけど、
マザーに固定する方法がめんどくさそうなので、既製品にした。
コイツはプッシュピンタイプでグリス付き。言うこと無し。

固定方法がプッシュピンで、プラスティックの爪をマザーの裏で固定しているため、完全にマザーだけにしないといけない。

裏側の固定部分はこんな感じ。


これが発熱の元、nForce4 Ultra.


グラフィックボードを仮に挿して、クリアランスを確認。


組み立て終わり。
しかし、こういう状態からマザー単体にする作業ってかなり萎える。


電源入れてみると、静かでいい感じ。
4800rpm / 19.2dB以下ってのはカタログに書いていたんだけど、19dBって静かなのね(^^;
ケースに入れると、ほとんどわからないレベル。

まぁ、となりに12cmファン×4基の爆音サーバーが動いているので、そんなに静かさを求めても仕方が無いんだけどねw

おまけ。

諸悪の根源・・・

2007年12月24日

[FreeBSD]PCルーターを作ろう。負荷テスト編。

Bit Comet のログで
Windows XP UPnP Status: Found FreeBSD router [FreeBSD] [http://www.freebsd.org/]
という一文があった。どうやら、upnp router として認識しているようだ。

早速負荷テストをしてみる。BTで巨大ファイルを落としながら、2chのログビューアで巡回。
大体、UL 2MB/s, DL 2MB/s ぐらい、TCPのセッションが500 程で、





# ps aux
USERPID%CPU%MEMVSZRSSTTSTATSTARTEDTIMECOMMAND
root1344.70.008??WLThu02PM49:36.48[swi1: net]
root1024.60.008??RLThu02PM6065:20.78[idle]
root1913.00.008??WLThu02PM12:07.43[irq9: em0 acpi0]
root2412.50.008??WLThu02PM10:04.66[irq5: de0]

一番、負荷がかかってそうな時がこんな感じ。
CPU IDLEが24%。
まぁ余力があるといえばあるんだけど、WAN側が1Gになったら、確実に力不足だなぁ。

メモリーは余裕でした。mpd +pf + miniupnpd で計3%程。
一番食ってるのはsnmpd で4.4%かな。まだ、snmpd は入れただけで、使える状態に持っていってないので、詳細はパス。

2007年12月20日

[FreeBSD]PCルーターを作ろう。upnpd設定編。

さて、負荷テストをしようと、BitTorrent ってのを物色。
DL系 P2Pソフトは使ったこと無いんだけど、まぁ、これも何かの縁だ。
というわけで、おもむろにBitComet 0.70 を使うことにする。

詳しく仕組みはよくわかんないが、がんがん NAT セッションを張りまくって、ルーターを選ぶソフトらしい。
とりあえず、実行する。
# tcpdump -n -e -ttt -i pflog0
↑で、リアルタイムにログを眺めてると、がんがん蹴られてるのが見える。

ああ、port開けなきゃ・・・

前置きが長かったけど、ここで UPnP の登場です。
BitComet はUPnP対応らしいので、PCルーターでupnpd を動かします。それでうまくいくはず。

イロイロ、ググってると、Linux-igd (upnpd)の記事が多いんだけど、
これって ipf/ipnat を使うのが前提っぽい。うちの場合は pf なんで却下。
で、6.2R の ports には入っていなかったんだけど miniupnpd というのを使うことにした。
http://www.freebsd.org/cgi/pds.cgi?ports/net/miniupnpd
/usr/ports/net に展開して、make; make install
無事に終わると、/etc/miniupnp.conf ができてるので適当に弄る。
ext_ifname=ng0
listening_ip=192.168.1.1/24
とりあえず、この2つ。

pf.confも弄る。
rdr-anchor "miniupnpd"
anchor "miniupnpd"
この二行を追加。


で、miniupnpd を実行して、pf のルールを再読み込みして終わり。
なんかあっけなく終わってしまった。


動作確認はBTの使い方を、まだ、わからないので、フュージョン フォンP'で。
UPnP対応のルーターじゃないと、NAT越えができない、ソフトフォンです。
miniupnpd 実行前はSIPが通りませんでしたが、実行後はSIPのNAT越えOKです。
どうやら、問題なく動いているようです。

#本当はSIP-NATというのを実装してみたかったんだけど、どうやら、無理?

[FreeBSD]PCルーターを作ろう。pf設定編。その2。

最終的な pf.conf の中身。


# Macros: define common values, so they can be referenced and changed easily.
ext_if="ng0" # replace with actual external interface name i.e., dc0
int_if="em0" # replace with actual internal interface name i.e., dc1
int_net="192.168.1.0/24"
www_srv="192.168.1.2"

# Tables: similar to macros, but more flexible for many addresses.
#NG IP address block
table const { 222.216.0.0/15 }
table const { 122.120.0.0/13 }

# Options: tune the behavior of pf, default values are given.
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
set loginterface ng0
set optimization normal
set block-policy drop
#set require-order yes
#set fingerprints "/etc/pf.os"

# Normalization: reassemble fragments and resolve or reduce traffic ambiguities.
scrub in on $ext_if all fragment reassemble
scrub out on $ext_if all max-mss 1414

# Queueing: rule-based bandwidth control.
#altq on $ext_if bandwidth 2Mb cbq queue { dflt, developers, marketing }
#queue dflt bandwidth 5% cbq(default)
#queue developers bandwidth 80%
#queue marketing bandwidth 15%

# Translation: specify how addresses are to be mapped or redirected.
# nat: packets going out through $ext_if with source address $internal_net will
# get translated as coming from the address of $ext_if, a state is created for
# such packets, and incoming packets will be redirected to the internal address.
nat on $ext_if from $int_net to any -> ($ext_if)

# rdr: packets coming in on $ext_if with destination $external_addr:1234 will
# be redirected to 10.1.1.1:5678. A state is created for such packets, and
# outgoing packets will be translated as coming from the external address.
rdr on $ext_if inet proto tcp from any to any port 8080 -> $www_srv port 80


# rdr outgoing FTP requests to the ftp-proxy
#rdr on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021

# spamd-setup puts addresses to be redirected into table .
#table persist
#no rdr on { lo0, lo1 } from any to any
#rdr inet proto tcp from to any port smtp -> 127.0.0.1 port 8025

# Filtering: the implicit first two rules are

#def. block all
block log all

#loop back & internal
pass quick on lo0 all
pass quick on $int_if all

#NG IP BLOCK
block log quick on $ext_if from { <ng_ip_cn>, <ng_ip_tw> } to any

#www
pass in quick on $ext_if proto tcp from any to $www_srv port 80 flags S/SA modulate state

#ICMP
pass in quick on $ext_if inet proto icmp all icmp-type echoreq keep state

#int -> ext
pass out quick on $ext_if proto { udp, tcp, icmp } from any to any keep state

前回とほとんどルールは変えてませんが、IPブロック単位で弾くフィルターを追加しました。
いまのところ、port 8080で執拗にアクセスしてくるところはこのへんなので。
port 80だったら、もっと大量にしてしてやらないとダメだろうな。


まぁ、しばらくこれで運用してみようと思う。

さて、次は負荷テストでもしようか。

2007年12月13日

[FreeBSD]PCルーターを作ろう。pf設定編。

とりあえず、NAT BOXの出来上がり。
これからfilterを煮詰めていく。

ネットワークは192.168.1.1/24 です。192.168.1.2で httpd が動いてます。
身内でしか使わない www なんで、port を変えてあります。
httpd 自体は80で動いてますが、外向きには8080で port を開いて変換してます。

#macro
ext_if="ng0"
int_if="em0"
int_net="192.168.1.0/24"
www_srv="192.168.1.2"


#nat
nat on $ext_if from $int_net to any -> ($ext_if)

#www の port 変換
rdr on $ext_if inet proto tcp from any to any port 8080 -> $www_srv port 80

#基本は拒否。
block log all

#ループバックと内側の許可
pass quick on lo0 all
pass quick on $int_if all

#wwwを許可
pass in quick on $ext_if proto tcp from any to $www_srv port 80 flags S/SA modulate state

#ICMPを許可
pass in quick on $ext_if inet proto icmp all icmp-type echoreq keep state

#内側から外側へ許可
pass out quick on $ext_if proto { udp, tcp, icmp } from any to any keep state


これでどうだろ?詳しい人指摘ヨロ。

参考にしたサイト。
http://www.usupi.org/info/pf.html


蛇足:
ちなみに、ddns取ってます。
vmax.mydns.jpでつ。
httpd動いてますが、普通には見れませんので見たい人はメールくれ。

[FreeBSD]PCルーターを作ろう。dhcpd編。

Local 側の NIC は em0 です。
192.168.1.0/24 のネットワークを作ります。

portsでdhcpdをインストール。 /net/isc-dhcp3-server にあります。

/usr/local/etc/dhcpd.confでファイル作成。
option domain-name-servers 60.56.0.135; #これ、eoのDNSね。
default-lease-time 86400;
max-lease-time 259200;
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0{
range 192.168.1.10 192.168.1.100;
option routers 192.168.1.1;
}

/etc/rc.confに
dhcpd_enable="YES"
dhcpd_ifaces="em0"
を追記。

はい。再起動。


さぁて、次はpf の filter設定を煮詰めるとするか・・・

あ、そうそう。
dhcpでIP貰ったPCはDNSの情報もらえるんだけど、
dhcpdを動かしているこのマシーンはDNSの情報を引けないので、指定してやる必要がある。
#これをしておかないと、portinstallもできん。
/etc/resolv.conf に
nameserver 60.56.0.135
と書いておきましょう。↑これはeoのDNSね。

[FreeBSD]PCルーターを作ろう。pf編。

次は pf の設定。

kernel に
device pf
device pflog
device pfsync

options ALTQ
options ALTQ_CBQ # Class Bases Queuing (CBQ)
options ALTQ_RED # Random Early Detection (RED)
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
options ALTQ_PRIQ # Priority Queuing (PRIQ)
#options ALTQ_NOPCC # Required for SMP build
↑うちはPIII-500の1cpuなんで、コメント。
を追加。

rc.confに
pf_enable="YES" # Enable PF (load module if required)
pf_rules="/etc/pf.conf" # rules definition file for pf
pf_flags="" # additional flags for pfctl startup
pflog_enable="YES" # start pflogd(8)
pflog_logfile="/var/log/pflog" # where pflogd should store the logfile
pflog_flags="" # additional flags for pflogd startup

を追加。

設定ファイルは /etc/pf.conf

#macro
ext_if="ng0"
int_if="em0"

# Options: tune the behavior of pf, default values are given.
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
set loginterface ng0
set optimization normal
set block-policy drop
#set require-order yes
#set fingerprints "/etc/pf.os"

#### Traffic Normalization ####
scrub in on $ext_if all fragment reassemble   # 入りのパケットのフラグメントを再構成
scrub out on $ext_if all max-mss 1414   # 出るパケットのmssを1414に書き換え
#参考サイトからコピペ。

#nat
nat on $ext_if from ($int_if)/24 to any -> ($ext_if)

#filter
pass in all #ちょ、おまwwwww
pass out all   #とりあえず、動かない原因が nat にあるのか filter にあるのか切り分けたかったので(汗

#loopback
pass in quick on lo0 all
pass out quick on lo0 all

#local
pass in quick on $int_if all
pass out quick on $int_if all


とりあえず、フィルターの設定は後回しで、nat をまず動かす。


kernelを再構築。そして、reboot。
rc.conf で pf を実行するようにしているの、起動時に立ち上がるんだけど、
デバイス "ng0" は mpd 実行後に作られる仮想デバイスなので、自動時に nat は動作しません。

なので、起動後
su
mpd -b
sh /etc/rc.d/pf restart
という流れになります。

次はdhcpdだ。

参考にしたサイト。
http://www.daily-labo.com/content_22.html
http://openbsd.bug.it/faq/pf/ja/nat.html
http://www.netbsd.org/ja/docs/network/pf.html

[FreeBSD]PCルーターを作ろう。mpd編

FreeBSD 6.2R + mpd + pf でがんばってみよう。

mpd は ports で入れる。
kernel に以下の option を追加。
options NETGRAPH # netgraph(4) system
options NETGRAPH_BPF
options NETGRAPH_ETHER
options NETGRAPH_IFACE
options NETGRAPH_PPP
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
options NETGRAPH_VJC

#最新のカーネルには標準で入っているので options いらないって情報がありますが
#よくわからないので、とりあえず設定。


mpd の設定ファイルは usr/local/etc/mpd/ 以下に作られるので、sample を cp して作る。

・mpd.conf

default:
load eonet


eonet:
new -i ng0 eonet PPPoE
# Configure the interface: dial on demand, default route, idle timeout.
set iface addrs 1.1.1.1 2.2.2.2
set iface route default
set iface disable on-demand
set iface idle 0
# Configure the bundle account name.
set bundle authname PPPoEのアカウント
# Configure IP addressing -- we get both endpoint assignments from peer.
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ipcp yes vjcomp
# Configure the (only) link. We expect to be authenticated by peer.
set link disable chap pap
set link accept chap
# Deny weak MS-CHAP version
set link deny chap-msv1
set link no acfcomp protocomp
# Configure modem telephone number, and enable ringback
# set modem script DialPeer
# set modem var $Telephone "1-415-555-1212"
# set modem idle-script Ringback
# "Open" connection (but don't actually dial until there's demand)
open iface

・mpd.links

PPPoE:
set link type pppoe
set pppoe iface de0
set pppoe service "whatever"
set pppoe disable incoming
set pppoe enable originate


・mpd.secret

PPPoEのアカウント パスワード


とりあえず、これで mpd の設定終わり。

kernel を再構築して、reboot 。

mpd と打つと・・・


[root@gateway]# mpd
Multi-link PPP for FreeBSD, by Archie L. Cobbs.
Based on iij-ppp, by Toshiharu OHNO.
mpd: pid 1941, version 3.18 (root@gateway.nnn.mcu.or.jp 18:19 9-Dec-2007)
[eonet] ppp node is "mpd1941-eonet"
[eonet] exec: /sbin/ifconfig de0 up
[eonet] using interface ng0
[eonet] IPCP: peer address cannot be zero
[eonet] IFACE: Open event
[eonet] IPCP: Open event
[eonet] IPCP: state change Initial --> Starting
[eonet] IPCP: LayerStart
[eonet:PPPoE] [eonet] bundle: OPEN event in state CLOSED
[eonet] opening link "PPPoE"...
[PPPoE] link: OPEN event
[PPPoE] LCP: Open event
[PPPoE] LCP: state change Initial --> Starting
[PPPoE] LCP: LayerStart
[PPPoE] device: OPEN event in state DOWN
[PPPoE] device is now in state OPENING
[PPPoE] rec'd ACNAME "K-OPT-BAS"
[PPPoE] PPPoE connection successful
[PPPoE] device: UP event in state OPENING
[PPPoE] device is now in state UP
[PPPoE] link: UP event
[PPPoE] link: origination is local
[PPPoE] LCP: Up event
[PPPoE] LCP: state change Starting --> Req-Sent
[PPPoE] LCP: phase shift DEAD --> ESTABLISH
[PPPoE] LCP: SendConfigReq #1
MRU 1492
MAGICNUM bf6a3ab1
MP MRRU 1600
MP SHORTSEQ
ENDPOINTDISC [802.1] 00 07 e9 0d 05 8a
[PPPoE] LCP: rec'd Configure Request #24 link 0 (Req-Sent)
MRU 1492
AUTHPROTO CHAP MD5
MAGICNUM 7831d869
[PPPoE] LCP: SendConfigAck #24
MRU 1492
AUTHPROTO CHAP MD5
MAGICNUM 7831d869
[PPPoE] LCP: state change Req-Sent --> Ack-Sent
[PPPoE] LCP: rec'd Configure Reject #1 link 0 (Ack-Sent)
MP MRRU 1600
MP SHORTSEQ
ENDPOINTDISC [802.1] 00 07 e9 0d 05 8a
[PPPoE] LCP: SendConfigReq #2
MRU 1492
MAGICNUM bf6a3ab1
[PPPoE] LCP: rec'd Configure Ack #2 link 0 (Ack-Sent)
MRU 1492
MAGICNUM bf6a3ab1
[PPPoE] LCP: state change Ack-Sent --> Opened
[PPPoE] LCP: phase shift ESTABLISH --> AUTHENTICATE
[PPPoE] LCP: auth: peer wants CHAP, I want nothing
[PPPoE] LCP: LayerUp
[PPPoE] CHAP: rec'd CHALLENGE #91
Name: "ED0000-BAS02"
Using authname "********"
[PPPoE] CHAP: sending RESPONSE
[PPPoE] CHAP: rec'd SUCCESS #91
[PPPoE] LCP: authorization successful
[PPPoE] LCP: phase shift AUTHENTICATE --> NETWORK
[eonet] setting interface ng0 MTU to 1492 bytes
[eonet] up: 1 link, total bandwidth 64000 bps
[eonet] IPCP: Up event
[eonet] IPCP: state change Starting --> Req-Sent
[eonet] IPCP: SendConfigReq #1
IPADDR 0.0.0.0
COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
[eonet] IPCP: rec'd Configure Reject #1 link 0 (Req-Sent)
COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
[eonet] IPCP: SendConfigReq #2
IPADDR 0.0.0.0
[eonet] IPCP: rec'd Configure Nak #2 link 0 (Req-Sent)
IPADDR 58.70.13.199
58.70.13.199 is OK
[eonet] IPCP: SendConfigReq #3
IPADDR 58.70.13.199
[eonet] IPCP: rec'd Configure Ack #3 link 0 (Req-Sent)
IPADDR 58.70.13.199
[eonet] IPCP: state change Req-Sent --> Ack-Rcvd
[eonet] IPCP: rec'd Configure Request #95 link 0 (Ack-Rcvd)
IPADDR 60.56.25.12
60.56.25.12 is OK
[eonet] IPCP: SendConfigAck #95
IPADDR 60.56.25.12
[eonet] IPCP: state change Ack-Rcvd --> Opened
[eonet] IPCP: LayerUp
58.70.13.199 -> 60.56.25.12
[eonet] IFACE: Up event
[eonet] setting interface ng0 MTU to 1492 bytes
[eonet] exec: /sbin/ifconfig ng0 58.70.13.199 60.56.25.12 netmask 0xffffffff -link0
[eonet] exec: /sbin/route add 58.70.13.199 -iface lo0
[eonet] exec: /sbin/route add 0.0.0.0 60.56.25.12
[eonet] IFACE: Up event

と、コンソール奪ったままなので、通常は"mpd -b"で、バックグラウンドで動かしませう。

[root@gateway]# ifconfig ng0
ng0: flags=88d1 mtu 1492
inet 58.188.219.223 --> 60.56.25.12 netmask 0xffffffff

うーん、グローバルなアドレス貰ってるから、いけてるだろ、きっと・・・


次はpfだな。

参考にしたサイト。
http://www.seichan.org/wiki/index.php?FreeBSD-mpd
http://www.daily-labo.com/ygg14.html

2007年12月 9日

[FreeBSD]PCルーターを作ろう。

NECのVALUESTAR NX VE500J/1というPCを貰った廃棄処分された。
コンパクトで静かなPCなのでルーターとしてみようと思う。

#最初に断っておきますが、この記事は上級者が手本になるような記事ではなく、
#初心者が試行錯誤しながら、組上げていく、自分用の覚書ですので、あしからず。
#けど、ツッコミは歓迎です。

スペックはPIII-500に64MB。部屋に転がってる128MBを挿して192MBにした。
PCIは2スロットあるので、DEC21140のNIC(CenterCOM LA100-PCI-T-V2)とIntel PRO/1000 MT Dual Port Server Adapter (PWLA8492MT)の二枚挿してみた。
DECの方はWAN portとして利用するつもり。RT8139Dも余ってたんだけど、なんとなく。どっちが性能いいんだろね?
INTELの方はExpress用にオクで買っといたんだけど、認識しなかった(涙)ので、ここで使ってみる。PCI-X対応(ギリギリ干渉しなかった)でちょっともったいないんだが、LAN portとして(できることならDMZとLANで使い分け)。


で、IPNutsが有名?なんだけど、もう2年以上更新してないみたいなので、m0n0wallにしようとインスコしてみたが、カーネルの起動時に暴走する・・・

うーん。もういいや、FreeBSD入れて、Firewallマシンに仕立てよう・・

とりあえず、以前に焼いた6.2RのCDRで起動してインストール。
インストール自体は問題なくスムーズに完了。ipfwの設定をしようと思ったら"_"を打てない・・・
ググると、kbdmuxと日本語USBキーボートの組み合わせで問題が起こるらしい。
パッチ入れてもいいんだけど、このPC、PS/2挿すところ無いのよね。なんで、
#device kbdmux # keyboard multiplexer
と、カーネルで殺す。これで、問題なく"_"が打てるようになった。


さぁて、設定だ。ふう。

2007年12月 4日

[FON]ただ配りキター

「FON」1周年記念で「La Fonera」無償配布
http://www.itmedia.co.jp/news/articles/0712/04/news104.html

さてLa Fonera+の性能チェックでもするか。