【带你去你不知道的地方】之六:通用反代站(镜像站)—— 隐藏您的真实 IP

上一篇文章中,我们提到了 Google 反代站,而在本篇文章中将讨论的是反代站 2.0 ,即通用反代站。在当前时间点( 2019 年 5 月 17 日),Ricky 可能是全宇宙第一个这么做的人。通用反代站非常隐蔽,可以混在正常的网站里工作。不过当前通用反代站还存在一些问题,比如视频无法播放、有些网站无法正常显示甚至无法访问等等,还有待进一步完善。

什么是通用反代站?

上一篇文章中我们已经解释了什么是反代站、正向代理和反向代理,那什么是通用反代站呢?顾名思义,就是可以反向代理任意网站的站点(如下图所示)。

Google
Google
BBC
BBC
维基百科
维基百科
维基解密
维基解密
Twitter
Twitter

欢迎食用

0 、食用前准备工作(安装 Chrome 浏览器插件)

1 、您需要在 PC 上安装一个 Chrome 浏览器,然后下载存有插件源代码的压缩包(当前版本:19.05.15 ),该压缩包的 MD5 值如下所示:

MD5 值 :
D14916D31B304A4D275AA36258D7D9A4 chrome_extension_surfing_19.05.15.zip

下载完成后解压,会得到一个名为 “ surfing ” 的文件夹。

注意:

  • Windows 和 MacOS 版的 Chrome 浏览器均可使用上述插件;
  • 移动端(如 Android 和 iOS )的 Chrome 浏览器无法使用插件,所以不支持移动端;
  • 其他浏览器(如 IE 、Safari 和 Firefox )不可以使用该插件,因为目前仅开发了 Chrome 浏览器的插件。

2 、打开 Chrome 浏览器(当前最新正式版:Chrome 74.0.3729.131 )并访问这个网址:chrome://extensions/ ,点击 “ 加载已解压的扩展程序 ”(如下图所示):

打开 Chrome 浏览器并访问这个网址:chrome://extensions/ ,点击 “ 加载已解压的扩展程序 ”
打开 Chrome 浏览器并访问这个网址:chrome://extensions/ ,点击 “ 加载已解压的扩展程序 ”

3 、在弹出的窗口中选中名为 “ surfing ” 的文件夹,然后点击 “ 选择文件夹 ”(如下图所示):

在弹出的窗口中选中名为 “ surfing ” 的文件夹,然后点击 “ 选择文件夹 ”
在弹出的窗口中选中名为 “ surfing ” 的文件夹,然后点击 “ 选择文件夹 ”

4 、此时插件就加载到 Chrome 浏览器了,这里可以打开或关闭插件(如下图所示):

此时插件就加载到 Chrome 浏览器了,这里可以打开或关闭插件
此时插件就加载到 Chrome 浏览器了,这里可以打开或关闭插件

5 、左键单击这个插件图标即可查看插件的一些信息(如下图所示):

左键单击这个插件图标即可查看插件的一些信息
左键单击这个插件图标即可查看插件的一些信息

6 、如果您搭建了自己的通用反代站,如:https://www.test.com/proxy/(注意:必须是 https 的站点),那么插件需要进行一下设置,右键单击这个插件图标,然后点击 “ 选项 ”(如下图所示):

右键单击这个插件图标,然后点击 “ 选项 ”
右键单击这个插件图标,然后点击 “ 选项 ”

接着就会打开一个网页,域名填写为 “ www.test.com ” ,目录填写为 “ proxy ” 即可,最后点击 “ 保存 ”(如下图所示):

域名填写为 “ www.test.com ” ,目录填写为 “ proxy ” 即可
域名填写为 “ www.test.com ” ,目录填写为 “ proxy ” 即可
1 、登录账号与密码

插件开启后,打开这个网址:https://surfing.makesky.net/53136/(或 http://s.makesky.net/53136/ ),此时会让你输入一个账号和密码:

本文隐藏内容 登陆 后才可以浏览

注意:

  • 我们推荐您自行租赁服务器、自行搭建通用反代站;
  • 插件开启后,在任意标签页访问任意网站,都会被重定向到通用反代站(如访问 ccie.lol ,就会被重定向至 https://surfing.makesky.net/53136/https/ccie.lol ),所以在不需要时请关闭插件;
  • 为了安全起见,Cookie 被置空了,所以大部分网站均无法登录。

如何搭建?

0 、搭建前准备工作:
  • 您需要一台位于中国大陆地区以外的 CentOS Linux 6 / 7 服务器,如香港、日本、新加坡和美国等地(各云主机厂商均可租赁,但小心实名制监管,推荐使用搬瓦工);
  • 既然是要做网站,您还需要注册一个域名(域名可去阿里云注册;但阿里云是实名制的,小心监管,不过目前查一个人还是很容易的),本篇文章将以 surfing.makesky.net 为例;
  • 为了增强安全性,您还需要申请一张 https 证书( https 证书可去阿里云或者 FreeSSL 申请,您也可以使用自动化申请和更新 https 证书的脚本 acme.sh )。

如果您境外的网站已经使用了 Nginx ,那么通用反代站是可以跟您原有的网站部署在一起的,并不冲突。如您在美国有一台 CentOS Linux 6 / 7 ,上面安装了 Nginx ,并挂了您的博客网站 https://www.test.com ,那么您只需要找出一个还没有被使用过的目录,如 https://www.test.com/proxy/ ,然后在 Nginx 里做相关配置即可(具体配置如下所示)。

1 、在 Nginx 上部署通用反代站:

本篇文章介绍的安装步骤仅用于快速(或最小化)搭建通用反代站;关于 Nginx 详细的编译安装和使用介绍,请点击这里

在安装 Nginx 前请先升级一下 CentOS ,并通过 yum 源来安装一些依赖包:

[root@host ~]# yum -y update
[root@host ~]# yum -y install pcre pcre-devel zlib zlib-devel gcc openssl openssl-devel

前往 Nginx 官网获取最新版本的 Nginx 的下载链接( 当前最新版本为 1.15.12 ),使用 wget 命令下载到 CentOS 并编译安装:

[root@host ~]# cd /tmp
[root@host tmp]# yum -y install wget
[root@host tmp]# wget http://nginx.org/download/nginx-1.15.12.tar.gz
[root@host tmp]# tar -zxvf nginx-1.15.12.tar.gz
[root@host tmp]# cd nginx-1.15.12/
[root@host nginx-1.15.12]# ./configure --with-http_ssl_module
[root@host nginx-1.15.12]# make && make install

我们假设您境外的博客网站为 https://surfing.makesky.net ,您现在想将这个目录 https://surfing.makesky.net/53136/ 转为通用反代站来使用,您当前的 /usr/local/nginx/conf/nginx.conf 配置文件如下所示:

user nobody nobody;
worker_processes auto;
error_log logs/error.log crit;

pid logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
    use epoll;
    worker_connections 51200;
}

http
{
    include mime.types;
    default_type application/octet-stream;
    server_tokens off;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 8m;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    tcp_nodelay on;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    #limit_zone crawler $binary_remote_addr 10m;
    log_format default '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" -- "$http_cookie" $http_x_forwarded_for "$proxy_add_x_forwarded_for" "$request_time"';

    server {
        listen       80;
        server_name  surfing.makesky.net;

        location / {
                rewrite "^/(.*)" https://$host/$1 redirect;
        }
    }

    server {
        listen 443 ssl;
        ssl_certificate   cert/surfing.makesky.net.pem;
        ssl_certificate_key  cert/surfing.makesky.net.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        index index.html index.htm;
        root /www/$host;

        server_name surfing.makesky.net;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        access_log logs/access.log  default;

        location / {
            root /www/$host;
        }

    }

}

其中 cert/surfing.makesky.net.pem 和 cert/surfing.makesky.net.key 为域名 surfing.makesky.net 的 https 证书文件,存放路径位于 /usr/local/nginx/conf/cert/ 。

现在请在下述位置 include 进通用反代站的配置文件 surfing_nginx.conf :

    server {
        listen 443 ssl;
        ssl_certificate   cert/surfing.makesky.net.pem;
        ssl_certificate_key  cert/surfing.makesky.net.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        index index.html index.htm;
        root /www/$host;

        server_name surfing.makesky.net;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
        access_log logs/access.log  default;
        include /usr/local/nginx/conf/surfing_nginx.conf;

        location / {
            root /www/$host;
        }

    }

然后创建通用反代站的配置文件 surfing_nginx.conf :

[root@host nginx-1.15.12]# vi /usr/local/nginx/conf/surfing_nginx.conf

接着键入小写字母 i ,进入编辑模式,将以下配置复制粘贴进去(请根据实际需要进行相应地修改):

location ~* ^(/53136/|/53136/index.html)$ {
        index index.html;
        root /www/$host/;

        add_header 'surfing_url_protocol' 'surfing_site';
        add_header 'surfing_url_domain' 'surfing_site';
}

location ~* ^/53136/ {
        set $flag 0;
        set $url_protocol NULL;
        set $url_domain NULL;

        # 1. get url_domain and url_protocol
        if ($request_uri ~* "^/[^/]*/(https|http|ws|wss){1}/([a-zA-Z0-9][\-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][\-a-zA-Z0-9]{0,62})+\.?)") {
                set $url_protocol $1;
                set $url_domain $2;
                set $flag "${flag}1";
        }

        if ($flag != "01") {
                return 400;
        }

        # 2. redirect
        if ($request_uri !~* "^/[^/]*/[^/]*/[^/]*/") {
                rewrite .* /53136/${url_protocol}/${url_domain}/ redirect;
        }

        # 3. get parameter
        rewrite "^/[^/]*/[^/]*/[^/]*(.*)" $1 break;

        resolver 8.8.8.8;
        #add_header 'Access-Control-Allow-Origin' '*';
        #add_header 'Access-Control-Allow-Credentials' 'true';
        #add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        add_header 'surfing_url_protocol' '$url_protocol';
        add_header 'surfing_url_domain' '$url_domain';

        proxy_buffer_size 128k;
        proxy_buffers 32 64k;
        proxy_busy_buffers_size 256k;

        proxy_set_header Cookie null;
        proxy_set_header Host $url_domain;
        proxy_set_header Accept-Encoding "";
        proxy_hide_header Strict-Transport-Security;

        proxy_connect_timeout 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;

        proxy_pass ${url_protocol}://${url_domain};
}

按一次 ESC 键退出编辑模式,然后键入 “ :wq ” 保存并退出。

为了安全起见,Cookie 被置空了( proxy_set_header Cookie null; ),请根据实际需要进行相应地修改。

如果您不希望使用 “ 53136 ” 这个目录名称,而是需要使用 “ proxy ” 这个目录名称,可以使用下述命令进行一个批量修改:

[root@host nginx-1.15.12]# sed -i "s#53136#proxy#g" /usr/local/nginx/conf/surfing_nginx.conf

接着再创建如下文件夹和文件:

[root@host nginx-1.15.12]# mkdir -p /www/surfing.makesky.net/53136/
[root@host nginx-1.15.12]# wget https://surfing.makesky.net/53136.html -O /www/surfing.makesky.net/53136/index.html

当然,如果您的通用反代站是 https://www.test.com/proxy/ ,命令应该改成这样:

[root@host nginx-1.15.12]# mkdir -p /www/www.test.com/proxy/
[root@host nginx-1.15.12]# wget https://surfing.makesky.net/53136.html -O /www/www.test.com/proxy/index.html

现在使用如下命令启动 Nginx 即可:

[root@host nginx-1.15.12]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2 、启用 Nginx 认证(可选):

如果您不希望任何人都可以访问您的网站,那么需要启用 Nginx 认证,仅登录成功后才可访问该网站(如下图所示)。

启用 Nginx 认证
启用 Nginx 认证

通过 yum 源来安装依赖包 httpd :

[root@host ~]# yum -y install httpd

生成密码文件:

[root@host ~]# mkdir /usr/local/nginx/conf/auth
[root@host ~]# htpasswd -b -c -m /usr/local/nginx/conf/auth/htpasswd makesky 123456

其中 makesky 为账号,123456 为密码,请根据实际需要进行相应地修改。

修改配置文件 surfing_nginx.conf ,在相关位置添加如下四行即可:

location ~* ^(/53136/|/53136/index.html)$ {
        auth_basic "login";
        auth_basic_user_file /usr/local/nginx/conf/auth/htpasswd;
        index index.html;
        root /www/$host/;

        add_header 'surfing_url_protocol' 'surfing_site';
        add_header 'surfing_url_domain' 'surfing_site';
}

location ~* ^/53136/ {
        auth_basic "login";
        auth_basic_user_file /usr/local/nginx/conf/auth/htpasswd;

        set $flag 0;
        set $url_protocol NULL;
        set $url_domain NULL;
        ......

现在使用如下命令让 Nginx 重新加载配置文件即可:

[root@host ~]# /usr/local/nginx/sbin/nginx -s reload

至此,反代站部署完成。

反代站 2.0 有何优缺点?

优点:

  1. 可以反代所有站点(虽然还不太完善);
  2. 隐蔽性非常强,可以混在正常的网站里工作。

缺点:

  1. 需要安装 chrome 浏览器插件,且仅能在 PC 端的 chrome 浏览器中使用;
  2. 暂时还不太完善,有很大的改进空间。

通用反代站可能在登录这块儿有问题(为了安全起见,Cookie 被置空了),所以在下一篇文章中将讨论如何在 CentOS Linux 7 上安装 GNOME 桌面,并使用 RDP 和 VNC 远程登录,以进一步达到隐藏您的真实 IP 的目的。

 

本篇文章欢迎转载,转载无需注明出处。

如有疑问,欢迎在下方留言;如本文有什么错误,欢迎在下方留言指正,谢谢。

 

参考自:

  • Chrome 编程教程:https://www.baidu.com/s?ie=utf-8&si=blog.mn886.net&ct=2097152&wd=chrome%E6%89%A9%E5%B1%95
  • Chrome 英文 API 文档:https://developer.chrome.com/extensions/api_index
  • Chrome 中文 API 文档:https://chajian.baidu.com/developer/extensions/api_index.html

文章附件

这篇文章对你有帮助吗?

相关文章

9条评论

    1. 是的,小飞机需要单独一个端口号,容易找到。这种可以和正常网站混合在一起使用。

    1. 啥?虚拟主机是说那些跑虚拟机的宿主机器吗?你是说物理服务器也能实现就好了?只要能安装 nginx 同时拥有固定的外网 IP 地址就可以这么部署吧?

  1. lighttaupeb37

    试着直接在浏览器开反代站,基本不可用,要是可以这样用就好了,这样在手机上就可以用了

    1. 因为手机上的 Chrome 没法安装插件,所以确实不能这么做。但 Google 反代站 那种形式还是可以的,手机和电脑都不需要安装插件。无非就是服务器上再多部署一些反代站,比如 Facebook 反代站,维基百科反代站等等 … 作为 IT 从业者,用电脑的时间还是比用手机的时间多的,至少我个人没啥问题。

  2. radaig

    按照教程搭建的通用站,访问google可以,访问facebook没有布局,youtube只有些框框。

Ricky 发表评论 取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据