![ipset/nft "허용 목록"이 포함된 dnsmasq 종속 포털](https://rvso.com/image/1703346/ipset%2Fnft%20%22%ED%97%88%EC%9A%A9%20%EB%AA%A9%EB%A1%9D%22%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20dnsmasq%20%EC%A2%85%EC%86%8D%20%ED%8F%AC%ED%84%B8.png)
저는 일종의 종속 포털을 만들기 위해 dnsmasq를 사용하고 있습니다.
아이디어는 다음과 같습니다.
dnsmasq
기본적으로 모든 DNS 요청을 로컬 IP( address=/#/123.123.123.123
) 에 다시 작성하고 nginx
"액세스 제한 페이지"를 표시하도록 여기에 이미 설정되어 있습니다.
하지만 일종의 제외 목록을 추가하고 싶습니다.
ipset create captive-allowed hash:ip
ipset add captive-allowed 222.222.222.222
여기에는 다시 작성해서는 안되는 클라이언트의 IP 주소가 포함되며 실제 IP를 전달하기 /#/
위해 dnsmasq를 프록시로 사용합니다 .1.1.1.1/1.0.0.1
내가 이해했듯이 dnsmasq
의 ipset 설정은 각 도메인에서만 작동합니다. 그래서 나는해야합니다 :
ipset=/google.com/captive-allowed/go.ogle.real.ip
ipset=/amazon.com/captive-allowed/ama.zon.real.ip
... billion records more ...
내 가정이 맞나요? 아니면 제가 뭔가를 놓치고 있는 걸까요?
답변1
dnsmasq를 통해 그런 작업을 전혀 수행하지 마세요. DNS를 포함시키면 불필요한 복잡성만 추가됩니다(캐싱, DNSSEC 실패, 우발적으로 우회하기 쉬움 등). 대신 iptables/nft만 사용하여 IP 수준에서 모든 HTTP 패킷을 리디렉션하세요( -j DNAT
또는 를 통해 DNAT 사용 -j REDIRECT
). 예를 들어:
-A FORWARD_CAPTIVE -m set --match-set AllowedClientsMAC src -j ACCEPT
-A FORWARD_CAPTIVE -j REJECT
<...>
-A PREROUTING_CAPTIVE -m set --match-set AllowedClientsMAC src -j ACCEPT
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.1.53
-A PREROUTING_CAPTIVE -p tcp -m udp --dport 53 -j DNAT --to-destination 192.168.1.53
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 80 -j REDIRECT
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 443 -j REDIRECT