특정 클라이언트에 대해 DNS를 강제하는 방법은 무엇입니까?

jluce50

ASUS RT-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를 사용하지 않는 경우 특정 클라이언트를 차단)?

jluce50

그것이 가치있는 일에 대해, 이것이 어떻게 작동하는지 (대부분) 여기에 있습니다. 먼저 OpenDNS를 사용하고 싶지 않은 모든 장치에 호스트 이름이 있는지 확인했습니다. 다음으로 라우터 식별에서 도메인 이름으로 "home"을 추가했습니다 (이 없이는 작동하지 않습니다). 그런 다음 다음 방화벽 스크립트를 추가했습니다.

# 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의 마지막 두 줄은 게스트 네트워크에 연결하는 모든 사람이 OpenDNS를 사용하도록합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 클라이언트에 대한 API 엔드 포인트 액세스를 제한하는 방법은 무엇입니까?

분류에서Dev

Firestore 클라이언트 앱이 컬렉션에 대해 올바른 문서 수를 유지하도록 강제하는 방법은 무엇입니까?

분류에서Dev

특정 VPN 클라이언트를 통해 특정 VPN 트래픽을 라우팅하는 방법은 무엇입니까?

분류에서Dev

Nginx에서 특정 SSL 클라이언트 인증서를 허용하는 방법은 무엇입니까?

분류에서Dev

모든 요청에 대해 HTTP 클라이언트 용 .NET Core 3.1로 기본 프록시를 설정하는 방법은 무엇입니까?

분류에서Dev

조건에 따라 특정 주제를 구독하는 Spring에서 스톰프 클라이언트 수를 제한하는 방법은 무엇입니까?

분류에서Dev

nodejs의 새 데이터에 대해 클라이언트를 푸시 / 알리는 방법은 무엇입니까?

분류에서Dev

Firefox, 특정 플러그인 (예 : Java)이 항상 '클릭 투 플레이'를 통해로드하도록 강제하는 방법은 무엇입니까?

분류에서Dev

특정 JUnit 테스트 케이스에 대해 @After를 수행하는 방법은 무엇입니까?

분류에서Dev

메시지 대기열을 사용하여 특정 클라이언트 / 사용자를 처리하는 방법은 무엇입니까?

분류에서Dev

JSP에서 클라이언트의 실제 IP를 얻는 방법은 무엇입니까? 특별한 상황

분류에서Dev

PC에서 IP를 강제 해제하는 방법은 무엇입니까?

분류에서Dev

WCF 테스트 클라이언트를 통해 Federated WCF에 액세스하는 방법은 무엇입니까?

분류에서Dev

컨트롤러의 특정 클래스에 대해 최대 깊이를 설정하는 방법은 무엇입니까?

분류에서Dev

스프링 통합에서 클라이언트를 인증하기 위해 TLS 서버를 설정하는 방법은 무엇입니까?

분류에서Dev

특정 URL에 대해 Apache에서 역방향 프록시를 사용하는 방법은 무엇입니까?

분류에서Dev

특정 URL에 대해 Apache에서 역방향 프록시를 사용하는 방법은 무엇입니까?

분류에서Dev

애플리케이션이 특정 CPU를 사용하도록 강제하는 방법은 무엇입니까?

분류에서Dev

처음에 특정 마스터의 세 페이지를 강제하는 방법은 무엇입니까?

분류에서Dev

FCM에서 특정 주제에 대해 구독 한 기기 수를 얻는 방법은 무엇입니까?

분류에서Dev

Squid를 설정하여 localnet의 클라이언트에 대한 기본 인증을 우회하는 방법은 무엇입니까?

분류에서Dev

특정 앱에 대해 레이크를 실행하는 방법은 무엇입니까?

분류에서Dev

테이블의 모든 행에 대해 특정 SQL 쿼리를 실행하는 방법은 무엇입니까?

분류에서Dev

테이블의 모든 행에 대해 특정 SQL 쿼리를 실행하는 방법은 무엇입니까?

분류에서Dev

https를 통해 wsdl에서 클라이언트 스텁을 생성하는 방법은 무엇입니까?

분류에서Dev

https를 통해 wsdl에서 클라이언트 스텁을 생성하는 방법은 무엇입니까?

분류에서Dev

클라이언트 측 대신 서버 측 유효성 검사를 강제하는 방법은 무엇입니까?

분류에서Dev

강제 방향 화살표 그래프에서 다른 크기의 원에 대해 수정 된 경로를 계산하는 방법은 무엇입니까?

분류에서Dev

Reactor Netty HTTP 클라이언트에서 TCP Keepalive를 설정하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    특정 클라이언트에 대한 API 엔드 포인트 액세스를 제한하는 방법은 무엇입니까?

  2. 2

    Firestore 클라이언트 앱이 컬렉션에 대해 올바른 문서 수를 유지하도록 강제하는 방법은 무엇입니까?

  3. 3

    특정 VPN 클라이언트를 통해 특정 VPN 트래픽을 라우팅하는 방법은 무엇입니까?

  4. 4

    Nginx에서 특정 SSL 클라이언트 인증서를 허용하는 방법은 무엇입니까?

  5. 5

    모든 요청에 대해 HTTP 클라이언트 용 .NET Core 3.1로 기본 프록시를 설정하는 방법은 무엇입니까?

  6. 6

    조건에 따라 특정 주제를 구독하는 Spring에서 스톰프 클라이언트 수를 제한하는 방법은 무엇입니까?

  7. 7

    nodejs의 새 데이터에 대해 클라이언트를 푸시 / 알리는 방법은 무엇입니까?

  8. 8

    Firefox, 특정 플러그인 (예 : Java)이 항상 '클릭 투 플레이'를 통해로드하도록 강제하는 방법은 무엇입니까?

  9. 9

    특정 JUnit 테스트 케이스에 대해 @After를 수행하는 방법은 무엇입니까?

  10. 10

    메시지 대기열을 사용하여 특정 클라이언트 / 사용자를 처리하는 방법은 무엇입니까?

  11. 11

    JSP에서 클라이언트의 실제 IP를 얻는 방법은 무엇입니까? 특별한 상황

  12. 12

    PC에서 IP를 강제 해제하는 방법은 무엇입니까?

  13. 13

    WCF 테스트 클라이언트를 통해 Federated WCF에 액세스하는 방법은 무엇입니까?

  14. 14

    컨트롤러의 특정 클래스에 대해 최대 깊이를 설정하는 방법은 무엇입니까?

  15. 15

    스프링 통합에서 클라이언트를 인증하기 위해 TLS 서버를 설정하는 방법은 무엇입니까?

  16. 16

    특정 URL에 대해 Apache에서 역방향 프록시를 사용하는 방법은 무엇입니까?

  17. 17

    특정 URL에 대해 Apache에서 역방향 프록시를 사용하는 방법은 무엇입니까?

  18. 18

    애플리케이션이 특정 CPU를 사용하도록 강제하는 방법은 무엇입니까?

  19. 19

    처음에 특정 마스터의 세 페이지를 강제하는 방법은 무엇입니까?

  20. 20

    FCM에서 특정 주제에 대해 구독 한 기기 수를 얻는 방법은 무엇입니까?

  21. 21

    Squid를 설정하여 localnet의 클라이언트에 대한 기본 인증을 우회하는 방법은 무엇입니까?

  22. 22

    특정 앱에 대해 레이크를 실행하는 방법은 무엇입니까?

  23. 23

    테이블의 모든 행에 대해 특정 SQL 쿼리를 실행하는 방법은 무엇입니까?

  24. 24

    테이블의 모든 행에 대해 특정 SQL 쿼리를 실행하는 방법은 무엇입니까?

  25. 25

    https를 통해 wsdl에서 클라이언트 스텁을 생성하는 방법은 무엇입니까?

  26. 26

    https를 통해 wsdl에서 클라이언트 스텁을 생성하는 방법은 무엇입니까?

  27. 27

    클라이언트 측 대신 서버 측 유효성 검사를 강제하는 방법은 무엇입니까?

  28. 28

    강제 방향 화살표 그래프에서 다른 크기의 원에 대해 수정 된 경로를 계산하는 방법은 무엇입니까?

  29. 29

    Reactor Netty HTTP 클라이언트에서 TCP Keepalive를 설정하는 방법은 무엇입니까?

뜨겁다태그

보관