环境:Nginx
问题:1.某网络实施网络准入控制,需要劫持不受信网段的客户端 所有访问到指定引导页面
2.需要劫持PS4 用户访问任意网站,或用户指南 方式全自动破解
解决办法:搭建dnsmasq DNS服务器,全域名解析指向内网,搭配ngnix 反向代理所有域名到指定页面
背景:
1.局域网内用户取得IP后,需要进行portal认证才能上网,需要引导用户去认证页面,通过DNS劫持和nginx转发,用户访问任意网址自动跳转到弹窗页面
2.PS4 破解需要访问Hen的网站,对于架设在内网的网站需要在浏览器中手动输入网址才能发起破解,想要从用户指南菜单自动跳转到网站 全自动执行Hen
技术栈:Docker + dnsmasq + Nginx
文章目录
- 1.DNS劫持 :
- 2.配置dnsmasq :
- 2.1 配置dnsmasq :
- 2.2 测试dnsmasq :
- 3.网站篇:
- 4.修改客户端DNS
- 5.在PS4上测试用户指南
- 5.1 确保DNS正确
- 5.2 打开用户指南,观察页面跳转和全自动破解
1.DNS劫持 :
为了图省事dnsmasq 直接拉的docker, 参考下面的配置文件,你如果有openwrt的路由器也可以直接使用,改配置文件即可,
这个镜像 jpillora/dnsmasq 带一个web修改配置文件界面,方便
version: "3.3"
services:
dns-server:
image: jpillora/dnsmasq
container_name: dns-server
restart: always
environment:
TZ: Asia/Shanghai
HTTP_USER: admin
HTTP_PASS: admin
PORT: "5380"
network_mode: "host"
volumes:
- /volume3/docker/dnsmasq/config/dnsmasq.conf:/etc/dnsmasq.conf:rw
# 日志大小限制
logging:
driver: json-file
options:
max-size: "10m"
2.配置dnsmasq :
2.1 配置dnsmasq :
访问容器的5380端口,修改配置文件,重启服务
我们的目的是用户访问任意网址都去我们的网站,直接这一条就好了:
#所有域名
address=/#/192.168.31.232
2.2 测试dnsmasq :
使用浏览器访问任意网址测试下,或者直接nsloouo或者ping
nslookup www.baidu.com 192.168.31.192
到这里,准入的部分,你只需要将这个VLAN/网段的 DHCP的DNS设置为这台,就可以实现自动跳转到验证页面了
3.网站篇:
安装ngnix是为了实现PS4 用户指南功能,他访问的是一个长链接,类似这样:
https://manuals.playstation.net/document/ct/ps4/index.html
如果直接转发域名,它携带的/document/ct/ps4/index.html传过去,就打不开了
就毕竟我们的伪站是没有这么多路径、虚拟目录,这就需要用到ngnix的反向代理了
为了省事还是用docker,参考下列配置:
用的jc21/nginx-proxy-manage 这个容器,web配置更方便了
version: '3'
services:
app:
image: 'dockerproxy.com/jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 冒号左边可以改成自己服务器未被占用的端口
- '82:81' # 冒号左边可以改成自己服务器未被占用的端口
- '443:443' # 冒号左边可以改成自己服务器未被占用的端口
volumes:
- ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中
- ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中```
打开NPM的配置网站,就是81端口对应的那个,修改默认网站设置,先随便填写一个网站
然后打开配置文件直接修改为所有路径到HEN的网站:
一般是在容器的ngnix/data/nginx/default_host/site.conf 这个文件
直接修改为如下样式
# ------------------------------------------------------------
# Default Site
# ------------------------------------------------------------
server {
listen 80 default;
listen [::]:80 default;
server_name default-host.localhost;
access_log /data/logs/default-host_access.log combined;
error_log /data/logs/default-host_error.log warn;
include conf.d/include/letsencrypt-acme-challenge.conf;
location / {
rewrite ^ http://192.168.31.192:84/900/02/index.html permanent;
}
}
找台电脑DNS设置为dnsmasq 的服务器,随便访问下任何网站,并携带路径测试,应该都能转发到目标网站
比如:
http://123/456
http://abc/def/123
4.修改客户端DNS
现在去PS4修改DNS执行dnsmasq,你也可以使用dhcp的option功能,让客户端自动获取不一样的dns
参考这篇文章:https://blog.csdn.net/wangrui1573/article/details/133270271