2014/07/07 (月)

雨の七夕。

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 が有効利用できてよかった。

comment