frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

原创思想,原创作品,仅供学习使用,不良后果与本人无关!!!!

想法来源:

       我前面写过关于frp内网穿透实现在局域网搭建私服教程,那都只能访问自己搭建的web服务器,我想把自己私网服务器改作代理服务器,让我在外网不仅能访问自己的web站点,还能用自己web站点做跳板代理我们去访问私网服务器,你说牛不牛逼。

实际环境分析:

        有很多大学生应该深有体会,比如我们学校的选课系统,就只能在校园网内选课,以前可以在外网访问到,据说是遭受黑客攻击后才关闭公网访问的,哈哈,但是,你学会了我今天这招,除非学校不能上网,不然照样可以黑掉xx,

实验环境:

         VMware 12.0

         centos7.4  虚拟机两台

         vps服务器一台(cnetos7  本人用阿里云学生机)

         win10笔记本

 

结构图:

         frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

第一大步:模拟搭建公司内部nginx服务器,192.168.109.139

       1、在centos7上安装nginx,略,我自己是编译安装的,这个自己搞定,后期我再写安装教程,节省篇幅

       2、修改nginx主配置文件

             vim /usr/local/nginx/conf/nginx.conf   #根据自己情况而定

             内容如下:

user  nginx;     #登录Nginx的用户
worker_processes 4;  #主进程数,一半设为cpu核心数
worker_cpu_affinity 0001 0010 0100 1000;

#错误日志位置
error_log  /usr/local/nginx/logs/error.log  info;

pid   /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile  65535;


events {
    use epoll;
    worker_connections  65535;
}


http {
    include       /usr/local/nginx/conf/mime.types;  #加载支持的文件类型
    default_type  application/octet-stream;          #没找到支持文件类型,默认以二进制流提示下载

    #日志格式定义
    log_format  main  '( $http_x_real_ip )- $remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" " $http_x_forwarded_for "';

    sendfile            on;
    tcp_nopush      off;
    tcp_nodelay     on;

    keepalive_timeout  10;

   #虚拟主机部分
    include  /usr/local/nginx/virtual/*.conf;

}

      3、happy.com 虚拟主机配置如下:

                  vim /usr/local/nginx/virtual/happy.com.conf

server {
        listen       80;
        server_name  www.happy.com;
        charset utf-8;
        access_log  logs/host.access.log  main;

        location / {
            root   /data/web/happy.com;   #站点家目录位置
            index  index.html ;
        }

}

   4、 在站点目录下创建index.html

       echo "192.168.109.139  happy.com" >/data/web/happy.com/index.html

      frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

     5、  命令    

       启动nginx:/usr/local/nginx/sbin/nginx
       快速停止nginx:/usr/local/nginx/sbin/nginx -s stop;
       优雅停止nginx(会将正在处理中的请求处理完毕):/usr/local/nginx/sbin/nginx -s quit;
       重新加载配置:/usr/local/nginx/sbin/nginx -s reload;

   6、 检查nginx是否工作正常

            frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

             frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

             frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

             也可以使用 curl  -I  www.happy.com

              frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

第二大步:私网squid代理服务器搭建、dns服务器搭建  192.168.109.66

       1、搭建squid代理服务器

             yum install squid

            frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

         2、重点:设置dns服务器地址

                 意思是当用户通过squid代理上网时使用的dns解析,方便解析公司内网的www.happy.com

             先修改squid主配置文件增加一个参数      /etc/squid/squid.conf 

                    frp内网穿透+squid缓存代理 实现远程访问公司内网服务器  

                   dns_nameservers 127.0.0.1

 

        (1)安装软件包

                  yum install bind
                  yum install bind-utils
                  yum install bind-libs

         (2)修改主配置文件

                  vim /etc/named.conf


options {
	listen-on port 53 { 127.0.0.1; };  #保持默认就好
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";
	dump-file 	"/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { any; };      #这里改成any

	recursion yes;

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

#重点在区域解析,解析的域名地址
zone "happy.com." IN {
	type master;                #注意改成master
	file "/var/named/happy.com.zone";   #使用哪个区域文件解析
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

        (3) 创建区域文件  /var/named/happy.com.zone

[[email protected] ~]# cat /var/named/happy.com.zone 
$TTL 1D
@       IN SOA  www.happy.com. www.happy.com. (
                                        0       ; serial 	
                                        1D      ; refresh   
                                        1H      ; retry      
                                        1W      ; expire     
                                        3H )    ; minimum  
@       NS      www.happy.com.
www    A  192.168.109.139

         (4)启动dns服务

                 systemctl start named

第三大步:阿里云主机配置frp服务端

     1、 首先到 frp 的 releases 页面下载最新版的对应 VPS 的处理器架构的压缩包https://github.com/fatedier/frp/releases

     2、可以在主机上wget对应frp压缩包,也可以下载到本地用ftp工具(winscp)上传到云服务器

      3、 tar -zxvf 解压对应压缩包

       4、进入解压后的目录  frp_0.22.0_linux_amd64

       5、编辑配置文件   vim frps.ini

[common]
#frp服务端与客户端连接端口,frps和frpc必须一致
bind_port = 7000



#下面参数设置与否都没关系,上面设置好就行
#服务端外部提供的web端口
#vhost_http_port = 8080
# 仪表盘端口,只有设置了才能使用仪表盘(即后台)
dashboard_port = 7500

 

           保存退出,

      6、启动服务端

              ./frps -c frps.ini   后台启动为./frps -c frps.ini  &

      表示启动完成

              frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

第四大步:squid服务器配置frp客户端

          1、同样下载frp压缩包到本地服务器     

          2、  解压frp压缩包

          3、编辑vim frpc.ini 配置文件

[common]
server_addr = 阿里云主机公网ip
server_port = 7000       #与frp服务端通信端口

[www]
type = tcp
local_ip = 127.0.0.1
local_port = 3128       #阿里云6000端口数据转发到本地3128端口
remote_port = 6000      #让阿里云主机开启6000端口转发

         启动服务

             ./frpc -c ./frpc.ini

          frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

 

第五大步:火狐设置代理,测试

          frp内网穿透+squid缓存代理 实现远程访问公司内网服务器               

         frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

手机端测试

       必须在wifi的高级设置那里设置

                   frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

                   frp内网穿透+squid缓存代理 实现远程访问公司内网服务器

总结:

      如果公司web服务器没有域名就不用搭建dns服务器,配置文件也不用加dns_nameservers 127.0.0.1,我这里使用虚拟环境搭建出来的,如果你想真的入侵内网,买个树莓派,将树莓派搭建成squid服务器,连上内网,一切就完成了,squid功能很多,不仅支持http还支持ftp等等,像Apache和nginx代理功能是不能满足要求的,她们的反向代理更不用说,只适合自己搭建集群使用。我这个和v*n隧道很相似,但是有区别 ,这就的自己体会了,有疑问欢迎联系我