web-dev-qa-db-ja.com

特定のクライアントにDNSを強制する方法は?

ASUSRT-N66UでShibbyのTomatoファームウェアを実行しています。私がやろうとしているのは、MACアドレスに基づいて特定のクライアント(つまり私の子供)にOpenDNS IPを強制し、他のクライアントはルーターのデフォルト値を取得することです。これまでのところ、とても良いです(ほとんど)。これを行うために使用しているDnsmasqスクリプトは次のとおりです。

# Assign alternate DNS for select hosts
# Set Specific Clients to be affected
dhcp-mac=set:altdns,XX:XX:XX:XX:XX:XX # kids laptop
dhcp-mac=set:altdns,XX:XX:XX:XX:XX:XX # kids iPod

# Set Alternate DNS
dhcp-option=tag:altdns,option:dns-server,208.67.220.220,208.67.222.222

これはうまく機能します... 2.4Ghzバンドで。 5Ghz帯域に接続すると、ルーターのデフォルトのDNSエントリを取得します。

質問1:このスクリプトを2.4Ghz(eth1)と5Ghz(eth2)の両方に適用する方法はありますか?それができない場合、Tomatoでは5Ghzバンドのデバイスをホワイトリストに登録できますか?一般的にワイヤレスのホワイトリスト/ブラックリストに登録できますが、どちらか一方にこれを行う方法がわかりません。

5Ghzにはいつでも別のキーを使用できるので、大したことではありません。より大きな抜け穴は、これがDHCPでのみ機能することです。ラップトップのDNS設定を変更すると、これが完全に回避されます。私の12歳の息子は、これを問題なく理解できるようになりつつあります。

質問2:DHCPを使用していない特定のクライアントにDNSを強制するにはどうすればよいですか?特定のMACアドレスなどの特定のIPへのDNSトラフィックのみを許可するファイアウォールルールのようなものを考えていましたが、どうすればよいかわかりません。または、DHCPを強制する(またはDHCPを使用していない場合は特定のクライアントをブロックする)方法はありますか?

2
jluce50

それが価値があるものについては、これが私がこれを(ほとんど)どのように機能させたかです。まず、OpenDNSを使用したくないすべてのデバイスにホスト名があることを確認しました。次に、ルーター識別のドメイン名として「ホーム」を追加しました(これがないと機能しません)。次に、次のファイアウォールスクリプトを追加しました。

# For certain devices, use default LAN DNS
# #############################################################
iptables -t nat -A PREROUTING -i br0 -s xxxx_Family_PC.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxx_Family_PC.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Laptop.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Laptop.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Chromecast.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Chromecast.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Galaxy-Note.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-Galaxy-Note.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-HTC-One-M8.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-HTC-One-M8.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr) 
iptables -t nat -A PREROUTING -i br0 -s Roku.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Roku.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Sharp-Aquos-HDTV.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s Sharp-Aquos-HDTV.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxxsiPhone2.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxxsiPhone2.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-MacBook.home -p tcp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -i br0 -s xxxxxx-MacBook.home -p udp --dport 53 -j DNAT --to $(nvram get lan_ipaddr)

# For every other client, use OpenDNS (including guest network - br1).
# #############################################################
iptables -t nat -A PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br1 -p udp --dport 53 -j DNAT --to 208.67.220.220
iptables -t nat -A PREROUTING -i br1 -p tcp --dport 53 -j DNAT --to 208.67.220.220

これは私が欲しかったものをほとんど手に入れます。唯一欠けているのは、最初のセクションに一致しない(したがって、OpenDNS IPを取得する)クライアントには、最初のセクションがダウンした場合に備えてセカンダリDNSがないことです。この方法を使用してそれを指定する方法はありません。それでも、それは99.99%の時間で機能しますが、これは十分に優れている必要があります。 br1の最後の2行は、ゲストネットワークに接続するすべての人がOpenDNSも使用するように強制されることを保証します。

2
jluce50

私は今トマトを試していますが、まさにこの理由でdd-wrtに戻るかもしれません。 dd-wrtでそれを行う方法は次のとおりです。

http://www.dd-wrt.com/wiki/index.php/OpenDNS

「DNSポート固有のIP /範囲をインターセプトする」セクションまで下にスクロールします

0
Mark