简介

早先时候,各大运营商还可以申请到公网ip,那时候是不需要内网穿透的,现在已经很难申请到公网ip了,所以只能曲线救国,使用内

网穿透来实现从外面访问家里的服务了。

我使用的是frp,一个开源的小工具,使用frp的话只有80和443端口是不用在浏览器里面输入端口直接访问的,如果有服务把这两个端

口占用,其他服务就只能使用ip+端口的方式访问了,这时候就需要利用到了nginx来进行端口复用了。


二、准备工作

一台用公网ip的服务器

一台内网机

三、安装frps

frps的安装我这里使用的是一键安装脚本。

使用ssh工具连接到公网服务器

1.png

复制下面命令到公网服务器上按回车开始执行

wget https://raw.githubusercontent.com/MvsCode/frps-onekey/master/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install

2.png

选择脚本的源,这里有两个源,我选的是第二个

3.png

选择frpc和frps连接的端口,可以使用默认端口也可以自定义端口,我这里自定义为20050端口

4.png

选择http端口,默认为80,可以自定义,这里我们需要自定义,因为待会需要安装nginx,要用nginx来进行端口复用,http默认的是80端口,所以80端口不能被占用,要预留出来。我这个80端口已经被占用,默认会报错。我用的是30000端口。

5.png

选择https端口,默认为443,和80端口一样,预留出来,所以需要自定义,我选的是30001端口。

6.png

选择web面板的端口,我选20051端口。

7.png

输入登录web面板的用户名,默认为admin,我这里使用默认的,直接回车即可

8.png

输入登录web面板的密码,我这里是演示,直接输入123456

9.png

输入frpc连接frps的密码,我这里使用默认的,直接回车即可

10.png

输入服务器ip,直接回车

11.png

输入frps的最大连接数,默认50个,一个人用50个也是够了,最大两百个,我这里默认了

12.png

选择日志级别,默认即可

13.png

选择日志最大天数,默认3天,最大30天,我这里默认

14.png

选择日志文件,直接默认

15.png

下面的选项就一直默认回车即可,直到出现这个界面就配置完成了,直接回车就开始部署了

16.png

出现这个界面就部署完成了,frps就好了

17.png

可以尝试登录一下web控制面板看看能不能登录上去,在浏览器地址栏中输入服务器ip+20051端口,看到这个界面就是安装并运行成功了。

18.png

这个脚本是在github上找的,想要看详细的信息可以访问:https://github.com/MvsCode/frps-onekey查看

四、安装和配置frpc

在github中搜索frp,第一个就是。

19.png

点击进入,点击tags

20.png

最顶部的是最新版,点击进入

21.png

然后找到对应自己内网机系统版本的frp下载,我这里使用的内网机是x86架构64位的centos7,依然是远程,所以我是复制下载链接,待会用wget命令下载。

22.png

使用ssh工具连接到内网机

23.png

使用wget命令下载刚刚复制下来的frp工具的地址

wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz

24.png

下载完成后可以使用ls命令查看下载的包,然后使用tar命令解压

tar -zxvf frp_0.44.0_linux_amd64.tar.gz

25.png

解压完成后进入解压出来的文件夹

cd frp_0.44.0_linux_amd64

26.png

使用ls命令查看里面的文件,使用vi frpc.ini编辑配置文件

27.png

i开始编辑,配置文件第二行为服务器地址,这里把127.0.0.1替换成你外网服务器的地址,第三行为frpc连接frps的端口,刚刚我们设置的是20050,在第四行加一行token = f7DXNLlbwjni4jvV,等于号后面的密钥是不同的,可以在刚刚的安装完成的界面查看的.

28.png

下面是穿透的服务,[]里面的穿透的服务名称,这里就讲究使用ssh服务来做演示,第七行type = tcp为服务的类型,一般分为tcp和udp,第八行local_ip = 127.0.0.1是内网机的地址,直接使用127.0.0.1就可以,当然也可以改为内网机的ip地址,第九行local_port = 22是内网机的服务端口,ssh服务是22端口,这个地方就填22端口,如果你的是web服务,是80端口,这个地方就填80,第十行remote_port = 30003是穿透出去的端口。待会访问的时候就用外网服务器的ip+这个30003端口进行访问。配置好配置文件后按esc,然后输入:wq回车进行保存。

29.png

保存后输入./frpc开始运行,如下图所示没有报错则连接成功

30.png

这时候可以尝试一下使用外网访问内网的服务了,这里已经成功的连接上了

31.png

到这里frp就配置完成了,下面就开始配置nginx了

五、安装nginx

用ssh连接到外网的服务器,输入下面命令开始安装编译工具和库文件

yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

32.png

安装PCRE,先到这个网站去复制最新的PCRE连接,然后使用wget命令下载安装,点击进入第一个

33.png

选择最顶上的这个最新的这个

34.png

点击选择后缀名为tar.gz的这个

35.png

等待弹出下载选项,然后右键复制下载地址

36.png

复制到下载地址后,回到ssh连接外网服务器,使用wget命令下载PCRE

wget https://cytranet.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz

37.png

等待下载完成后,使用ls命令查看下载到的文件,使用tar -zxvf命令解压文件

ls
tar -zxvf pcre-8.45.tar.gz

38.png

解压完成后使用cd命令进入安装包目录

cd cd pcre-8.45

38.png

运行下面命令进行编译安装

./configure
make && make install

39.png

下载nginx,首先进入这个网站复制nginx的最新的链接,然后右键复制稳定版的链接

40.png

进入到/usr/local/src/目录

41.png

使用wget命令下载最新稳定版nginx

wget https://nginx.org/download/nginx-1.22.0.tar.gz

42.png

使用ls命令查看下载下来的压缩包,然后使用tar命令解压下载下来的压缩包

ls
tar -zxvf nginx-1.22.0.tar.gz

43.png

使用cd命令进入解压出来的文件夹内

cd nginx-1.22.0

44.png

依次输入以下命令开始编译安装

./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcr-8.45
make
make install

45.png

使用以下命令可以查看nginx的版本,只要可以看到版本就说明已经安装成功了

/usr/local/webserver/nginx/sbin/nginx -v

46.png

下面就可以开始配置nginx的配置文件了,使用cd命令进入配置文件夹,使用ls命令查看所有文件,使用vi命令编辑配置文件,按i键开始编辑

cd /usr/local/webserver/nginx/conf/
ls
vi nginx.conf
i

47.png

以下是我的配置文件,可以参考以下,其实要改的地方就那么三个地方

#user  nobody;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;        #监听80端口
        server_name  47.106.122.149;    #监听的域名,这里填写的是域名,我这边是测试服务器所以填写的是ip

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://47.106.122.149:30004;     #跳转到的ip、域名和端口
        }       

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

48.png

配置文件配置好了之后按esc,然后按:wq回车保存并退出

49.png

输入以下命令启动nginx,如果启动没有报错的话就成功了

/usr/local/webserver/nginx/sbin/nginx

50.png

下面这几条命令是nginx常用的命令,记得每次修改完配置文件都需要重启nginx服务

/usr/local/webserver/nginx/sbin/nginx -s reload            # 重新载入配置文件
/usr/local/webserver/nginx/sbin/nginx -s reopen            # 重启 Nginx
/usr/local/webserver/nginx/sbin/nginx -s stop              # 停止 Nginx
二维码

发表评论