前言
之前听过nps是在内网碰到不出网的时候可以实现内网穿透,最近听师傅说可以docker部署nps然后利用socks5实现隐藏ip(也就是访问ip变成了我们vps从而实现隐藏ip),所以实际搭建了一下。一开始我把nps放到vps把上npc放在我的主机上,但是发现代理出去的ip和地址还是我自己的,不知道是哪里出了问题,最后问了几个师傅才明白其实真正实现socks转发的是npc,而nps只是用来启一个web管理端的,最后把nps、npc都放在vps上后成功实现功能完成隐藏ip。
nps一款轻量级、高性能、功能强大的内网穿透代理服务器。支持tcp、udp、socks5、http、p2p等几乎所有流量转发,可用来访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析、内网socks5代理等等,并且带有功能强大的web管理端。
原理
像nps、frp、ngork都是cs客户端服务端的代理工具,这类工具原理都是通过服务端生成相应的客户端,而生成的客户端才是需要真正走代理的服务器,可能说起来比较绕,用到这里来,其实nps就是用来搭建起web管理页面,并用来生成npc、赋予npc相应的隧道/代理功能,所以最终起socks作用的是npc,而nps只是个管理npc的服务端。
搭建
这里搭建分三部分,docker部署nps、执行npc、本地代理配置。配置用到的环境
1.vps(阿里云centos7)
2.火狐插件FoxyProxy或Proxifier代理软件
docker部署nps
这里我把可能用到的端口都放到了19000:19010,所以首先保证服务器的相应端口开放,如果有宝塔的话也要将端口放行。首先先拉取nps的镜像
docker pull ffdfgdfg/nps
在vps云服务器上做挂载目录(这个目录挂哪都行)
mkdir -p /mnt/sdc/nps/conf
从https://github.com/ehang-io/nps 把代码下载出来,把里面的conf文件夹目录里面的东西拷贝到上面的挂载目录里面(我这里有宝塔所以直接上传了,可以用xftp或者直接下载)
上传到服务器后,修改挂在目录里面的 nps.conf 文件,主要修改 http_proxy_port、 https_proxy_port、web_port 、web_username、web_password。
appname = nps
#Boot mode(dev|pro)
runmode = dev
http_proxy_ip=0.0.0.0 (官方下载下来没有此项)
http_proxy_port=19000 # 域名代理http代理监听端口
https_proxy_port=19001 # 域名代理https代理监听端口(一般会修改这两个端口,避免端口冲突)
https_just_proxy=true
#default https certificate setting
https_default_cert_file=conf/server.pem
https_default_key_file=conf/server.key
##bridge
bridge_type=tcp # 客户端与服务端连接方式kcp或tcp
bridge_port=19002 # 服务端客户端通信端口,也就是说客户端通过访问服务端的这个端口可以进行连接
bridge_ip=0.0.0.0
# Public password, which clients can use to connect to the server
public_vkey=123 # 客户端以配置文件模式启动时的密钥,设置为空表示关闭客户端配置文件连接模式
#Traffic data persistence interval(minute)
#Ignorance means no persistence
#flow_store_interval=1
log_level=7 # 日志输出级别
#log_path=nps.log
#Whether to restrict IP access, true or false or ignore
#ip_limit=true
#p2p
#p2p_ip=127.0.0.1 # 服务端IP,使用p2p模式必填
#p2p_port=6000 # p2p模式开启的udp端口
#web
web_host=a.o.com
web_username=admin # web界面管理账号
web_password=123 # web界面管理密码
web_port = 19003 # web管理端口,通过访问该端口可以访问NPS后台
web_ip=0.0.0.0
web_base_url= # web管理主路径,用于将web管理置于代理子路径后面
web_open_ssl=false
web_cert_file=conf/server.pem
web_key_file=conf/server.key
# if web under proxy use sub path. like http://host/nps need this.
#web_base_url=/nps
#Web API unauthenticated IP address(the len of auth_crypt_key must be 16)
#Remove comments if needed
#auth_key=test
auth_crypt_key =1234567812345678 # 获取服务端authKey时的aes加密密钥,16位
#allow_ports=9001-9009,10001,11000-12000
#Web management multi-user login
allow_user_login=false
allow_user_register=false
allow_user_change_username=false
#extension
allow_flow_limit=false
allow_rate_limit=false
allow_tunnel_num_limit=false
allow_local_proxy=false
allow_connection_num_limit=false
allow_multi_ip=false
system_info_display=false
#cache
http_cache=false
http_cache_length=100
#get origin ip
http_add_origin_header=false
#pprof debug options
#pprof_ip=0.0.0.0 # debug pprof 服务端IP
#pprof_port=9999 # debug pprof 端口
#client disconnect timeout
disconnect_timeout=60 # 客户端连接超时,单位 5s,默认值 60,即 300s = 5mins
接下来启动nps服务,设置对外映射端口
docker run -d -p 19000-19010:19000-19010 -v /mnt/sdc/nps/conf:/conf –name=nps ffdfgdfg/nps
访问vpsip:19003进入web管理页面,使用上面设置的admin:admin登录
来到客户端点击新增,填一个备注,下面三个都选是即可
创建完成后为其添加一个socks隧道,模式就是socks,id是第一张图里的,端口我这里写19005,这个端口是后面主机上开启socks代理对应的端口
docker运行nps
直接在https://github.com/ehang-io/nps/releases/tag/v0.26.10下载一个linux的客户端
也可以使用命令下载
wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
tar -zxvf linux_amd64_client.tar.gz
解压出一个npc一个conf,这里客户端的这个conf可以不配置直接使用,不配置的使用命令在web管理端查看
在npc所在位置执行
本地代理配置
这里我使用火狐插件Foxyproxy,也可以使用Proxifier或者其他的一些工具
欢迎关注听风安全,分享更多安全技术~
原文始发于微信公众号(听风安全):利用nps(docker部署)实现隐藏ip