2014-07-07:Debian squeeze で簡易ルータ&オレオレDNS
とある端末をネットにつなぎたいんだけど、特定のサイトにだけはDNS詐称して別サーバに誘導したい、というニーズがあって、ちょうど OpenBlockS600D が余ってたので、現実逃避でセットアップしたお話。
Debian での流儀もいろいろ忘れてたので、備忘に。
- OpenBlockS の eth0, eth1 は固定。eth0 を上流(外部インターネット)へ、eth1 を今回の目的の端末向けに。
- 目的の端末向けに DHCP でアドレスを配る。
ネットワーク設定は /etc/network/interfaces。
# cat /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.2 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 auto eth1 iface eth1 inet static address 192.168.254.254 network 192.168.254.0 netmask 255.255.255.0 broadcast 192.168.254.255
eth1 から eth0 に抜けてルーティングする設定。
/etc/sysctl.conf での ip_forward 設定と、/etc/network/if-up.d/ 以下にネットワーク有効化後の iptables のコマンド。
# cat /etc/sysctl.conf ... net.ipv4.ip_forward=1 ... # cat /etc/network/if-up.d/ipmasquerade #!/bin/sh /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # chmod +x /etc/network/if-up.d/ipmasquerade
続けて、オレオレDNSの設定。
debian の bind9 は /etc/bind/ ディレクトリ以下の named.conf はいじらず、named.conf.local や named.conf.options をいじる。
なお、配布される /etc/bind/named.conf.options には /var/cache/bind/ がディレクトリ指定されているけど、自分は無視して zone ファイルもフルパス指定で /etc/bind/ 以下に置いちゃう。
# apt-get install bind9 # cat /etc/bind/named.conf.options ... forwarders { 192.168.20.1; }; ... # cat /etc/bind/named.conf.local zone "example.com" { type master; file "/etc/bind/example.com.zone"; }; # cat /etc/bind/example.com.zone $TTL 1800 @ IN SOA dns.example.com. root.example.com. ( 14070701 ;serial 3600 ;refresh 1800 ;retry 172800 ;expire 86400 ) ;negative cache ttl IN NS test01.example.com. test01 IN A 192.168.0.5
最後に dhcpd の設定。
ターゲットの NIC のベンダーコードを見て、ターゲットの機器以外はアドレスあげないように。
# apt-get install isc-dhcp-server # cat /etc/dhcp/dhcpd.conf max-lease-time infinite; default-lease-time infinite; shared-network testnetwork { subnet 192.168.254.0 netmask 255.255.255.0 { option routers 192.168.254.254; option broadcast-address 192.168.254.255; option domain-name-servers 192.168.254.254; } class "target" { match if substring (hardware,1,3) = 00:11:22; } pool { allow members of "target"; range 192.168.254.101 192.168.254.150; } }
余らせてた OpenBlockS が有効利用できてよかった。