それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ヘアピンNATあらため、NATループバックをdd-wrtで

dd-wrt を使っていると、以前は出来たことでした。

ローカルルーターにフラレているグローバルIPを叩いたても見えない。
昔は見えたのでなぜかと悩む。またルーターによっても出来るものと出来ないものがありますね。

ヘアピンNATと言います

ヘアピンNAT - (゚∀゚)o彡 sasata299's blog
自宅でWebサーバを運用するならヘアピンNAT付きルータが便利 - Tari Lari Run
DD-WRT - FoNまとめwiki

LAN内からLAN内のサーバにアクセスしたときにきちんとループバックしてルーティングしてくれる機能はヘアピンNATと呼ばれる機能です。格安ルーターにはあまりついてないそうです。

dd-wrt で実現するには。

ヘアピンNATの実現

  1. DNSMasq
  2. iptables

で実現できる。


静的NATとか、ヘアピンNATと言われる機能のこと。 DD-WRTURIからIPアドレスへの変換を提供するため、管理しやすい。 詳細はDD-WRT ForumのEnabling NAT loopbackを参照。

DNSMasq

DD-WRTは、それを実現するのがDNSMasqらしい。
(つまり、IPではなく名前解決でやっちゃおうってことらしい)

静的NATとか、ヘアピンNATと言われる機能のこと。 DD-WRTURIからIPアドレスへの変換を提供するため、管理しやすい。
 詳細はDD-WRT ForumのEnabling NAT loopbackを参照。


DD-WRTは、それを実現するのがDNSMasqらしい。
(つまり、IPではなく名前解決でやっちゃおうってことらしい)

f:id:takuya_1st:20130320223436p:plain
f:id:takuya_1st:20130320223438p:plain
f:id:takuya_1st:20130320223433p:plain

前は動いたと思ったら壊れてるらしい
WARNING: Loopback is currently broken in build 15760 and higher but is easily fixed with iptables. See [Ticket 1868] for more information.

どうしようもないですね。

iptables でNATループバックを利用する

そこで別のアイディアを試した。iptablesだ。

Port Forwarding Troubleshooting - DD-WRT Wiki
#1868 (r15760 breaks NAT loopback) – DD-WRT


以下のコマンドを、shell command フォームかSSHで試す。

LAN=`nvram get lan_ipaddr`/`nvram get lan_netmask`
iptables -t nat -I POSTROUTING -o br0 -s $LAN -d $LAN -j MASQUERADE

これをスタートアップコマンドに書いたことで出来た。

LAN=`nvram get lan_ipaddr`/`nvram get lan_netmask`
iptables -t nat -I POSTROUTING -o br0 -s $LAN -d $LAN -j MASQUERADE


f:id:takuya_1st:20130320223441p:plain



完璧!