利用frp、3proxy、Proxifier,外网访问内网服务

利用frp、3proxy、Proxifier,外网访问内网服务

背景介绍

原来的情况如下图
利用frp、3proxy、Proxifier,外网访问内网服务后来,需要在外网用这个客户端访问内网服务器。而程序员已经离职…
因内网服务器本身没有外网连接,所以需要另一台,可以访问外网又可以访问内网的电脑,做一下内网穿透和代理。
东拼西凑,最后成为这么一个东西
利用frp、3proxy、Proxifier,外网访问内网服务逻辑如下,
PC-1 需要访问 PC-0(111.111.111.11:8888)(程序写死不能修改),
因为PC-0在内网中,想要访问内网就需要,先访问PC-4(222.222.222.22:9001)这frp的服务端口,等同于PC-2,利用PC-2上的代理程序,转到PC-0上。

ps:
1、为何用Proxifier这个软件,因为不知道客户端怎么搞的,不能走系统代理。
2、PC-2无公网IP,所以需要内网穿透
3、在pc-上,也可以不使用3proxy,而开一个端口转发也是可以的。

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=9001 connectaddress=111.111.111.11 connectport=8888

4、因为PC-2是双网卡(或者有两个路由),111.111.111.11这个地址是我虚构的,如果它是一个内网地址,那么他会正常的访问内网,如果这个地址,在路由表中,是外网地址,他会走外网路由而导致无法访问内部服务器。

route add -p 111.111.111.0 mask 255.255.255.0 192.168.1.1(内网网关)

配置

PC-4 云服务器 安装FRP

github链接
配置frps.ini

[common]
bind_addr = 0.0.0.0
bind_port = 7000  #frp客户端连接frp服务端的端口
authentication_method = token #设置frp客户端连接frp服务端的 口令
token = frp12323 #设置口令
log_file = /root/frp/frps.log
log_level = info
log_max_days = 3

配置为开机启动

vim /usr/lib/systemd/system/frp.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/root/frp/frp_0.33.0_linux_amd64/frps -c /root/frp/frp_0.33.0_linux_amd64/frps.ini
#注意地址。。。。
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target
systemctl enable frp
systemctl start frp
PC-2 安装FRP

配置frpc.ini

[common]
server_addr = 222.222.222.22 #云服务器公网IP
server_port = 7000 
token = frp12323 #口令
[conname] #连接名字,不能重复
type = tcp 
local_ip = 127.0.0.1
local_port = 9001 #本地端口 可以和外网端口不一样
remote_port = 9001 #外网端口

[conname1]
type = tcp
local_ip = 127.0.0.1
local_port = 9002
remote_port = 9002

因为 PC-2 是win系统,所以加一个计划任务使用以下脚本

@echo off
set retime=60
:start
D:\frp_0.33.0_windows_amd64\frpc.exe -c D:\frp_0.33.0_windows_amd64\frpc.ini
echo Error
echo 连接失败,60秒后重试 
timeout /t %retime%
goto start

#防止开机后启动失败,如果失败,循环启动,注意目录地址。。

PC-2 安装3proxy

github3proxy

配置

timeouts 1 5 30 60 180 1800 15 60
nserver 223.5.5.5
nscache 65536
service #作为windows服务启动
log D:\tool\3proxy\3proxy.log D
logformat "- +_L%t.%.  %N.%p %E %U %C:%c %R:%r %O %I %h %T"
rotate 30 #以上为日志 无所谓啦
users username:CL:password #设置用户名和密码 明文的
auth strong #设置访问模式为 强,就能用密码了
allow * #允许所有来源
maxconn 20 
socks -p9001 #代理模式为socks
3proxy.exe -c 3proxy.cfg  #根据自己的安装目录补充绝对地址

运行正常后 计划任务加入脚本

@echo off
D:\3proxy\bin64\3proxy.exe D:\3proxy\bin64\3proxy.cfg

注意自己的目录地址。。。

PC-1 使用 Proxifier

客户端不走系统代理,或有别的解决方式。
Proxifier,可以灵活的代理规则,还是很好用的。百度下载一个就行。
配置相对简单,不写了。
让程序需要访问,111.111.111.11:8888的时候,去访问 222.222.222.22:9001。
等同于走PC-2的代理。

上一篇:从Android中Activity之间的通信说开来


下一篇:Android基础 - 对话框和浮动Activity -- 转