うーむ、すさまじく fucking は仕様になっている。winmx用にこんな感じの設定をしていたのだが、
iptables -t nat -A PREROUTING -p tcp -d 61.xxx.xxx.xx \
--dport 6699 -j DNAT --to 192.168.xx.xx:6699
iptables -t nat -A PREROUTING -p udp -d 61.xxx.xxx.xx \
--dport 6257 -j DNAT --to 192.168.xx.xx:6257
この設定をしている時点では、思いとおりの動きをする。iptables -t nat -L でいうとこんな感じ
Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere 61.xxx.xxx.xxtcp dpt:6699 to:192.168.xx.xx:6699 DNAT udp -- anywhere 61.xxx.xxx.xxudp dpt:6257 to:192.168.xx.xx:6257
つまり、gwのtcp:6699, udp:6257をLAN内のmy machineにforwardする。だが、これを
/etc/init.d/iptables save /etc/init.d/iptables restart
としてみて、iptables -t nat -L してみると
Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere 61.xxx.xxx.xxtcp dpt:6699 to:192.168.xx.xx:6699 DNAT udp -- anywhere 61.xxx.xxx.xxudp to:192.168.xx.xx:6257
となってしまう。つまり、gw宛てのすべてのudpパケットがLAN内のmy machineにforwardされてしまう。このおかげで気づかぬまま土曜でかけている間 DNS 引けず。さらにgwの外側のアドレスを指定しているので、LAN内からは永久に気がつかない。しかし、日曜の朝メールを読んで、土曜に外部からのメールが一切きていないことから、何かおかしいと気がついたが。DNSはレコードの設定によって、相手側にある期間キャッシュされるわけで、今回1日で気がついたのはラッキーかも。これがキャッシュのせいでしばらくアクセスできてたが、アクセスできない人もいるとなって、さらに設定をいじった数日後だと原因追求に結構時間がかかったりする場合もある。とりあえずこれは自分が何かおかしなことをしたのか、iptablesのscriptまわりがおかしいのか調査しないと。とりあえずは forward設定用のscriptを別に書いて、それ経由で起動(設定)することで解決。
うーむ・・・・
訳がわからん・・・でも直ってよかったです!サンキュ☆