简介
早先时候,各大运营商还可以申请到公网ip,那时候是不需要内网穿透的,现在已经很难申请到公网ip了,所以只能曲线救国,使用内
网穿透来实现从外面访问家里的服务了。
我使用的是frp,一个开源的小工具,使用frp的话只有80和443端口是不用在浏览器里面输入端口直接访问的,如果有服务把这两个端
口占用,其他服务就只能使用ip+端口的方式访问了,这时候就需要利用到了nginx来进行端口复用了。
二、准备工作
一台用公网ip的服务器
一台内网机
三、安装frps
frps的安装我这里使用的是一键安装脚本。
使用ssh工具连接到公网服务器
复制下面命令到公网服务器上按回车开始执行
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
选择脚本的源,这里有两个源,我选的是第二个
选择frpc和frps连接的端口,可以使用默认端口也可以自定义端口,我这里自定义为20050端口
选择http端口,默认为80,可以自定义,这里我们需要自定义,因为待会需要安装nginx,要用nginx来进行端口复用,http默认的是80端口,所以80端口不能被占用,要预留出来。我这个80端口已经被占用,默认会报错。我用的是30000端口。
选择https端口,默认为443,和80端口一样,预留出来,所以需要自定义,我选的是30001端口。
选择web面板的端口,我选20051端口。
输入登录web面板的用户名,默认为admin,我这里使用默认的,直接回车即可
输入登录web面板的密码,我这里是演示,直接输入123456
输入frpc连接frps的密码,我这里使用默认的,直接回车即可
输入服务器ip,直接回车
输入frps的最大连接数,默认50个,一个人用50个也是够了,最大两百个,我这里默认了
选择日志级别,默认即可
选择日志最大天数,默认3天,最大30天,我这里默认
选择日志文件,直接默认
下面的选项就一直默认回车即可,直到出现这个界面就配置完成了,直接回车就开始部署了
出现这个界面就部署完成了,frps就好了
可以尝试登录一下web控制面板看看能不能登录上去,在浏览器地址栏中输入服务器ip+20051端口,看到这个界面就是安装并运行成功了。
这个脚本是在github上找的,想要看详细的信息可以访问:https://github.com/MvsCode/frps-onekey查看。
四、安装和配置frpc
在github中搜索frp,第一个就是。
点击进入,点击tags
最顶部的是最新版,点击进入
然后找到对应自己内网机系统版本的frp下载,我这里使用的内网机是x86架构64位的centos7,依然是远程,所以我是复制下载链接,待会用wget命令下载。
使用ssh工具连接到内网机
使用wget命令下载刚刚复制下来的frp工具的地址
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
下载完成后可以使用ls
命令查看下载的包,然后使用tar
命令解压
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
解压完成后进入解压出来的文件夹
cd frp_0.44.0_linux_amd64
使用ls
命令查看里面的文件,使用vi frpc.ini
编辑配置文件
按i
开始编辑,配置文件第二行为服务器地址,这里把127.0.0.1
替换成你外网服务器的地址,第三行为frpc连接frps的端口,刚刚我们设置的是20050,在第四行加一行token = f7DXNLlbwjni4jvV
,等于号后面的密钥是不同的,可以在刚刚的安装完成的界面查看的.
下面是穿透的服务,[]里面的穿透的服务名称,这里就讲究使用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
回车进行保存。
保存后输入./frpc
开始运行,如下图所示没有报错则连接成功
这时候可以尝试一下使用外网访问内网的服务了,这里已经成功的连接上了
到这里frp就配置完成了,下面就开始配置nginx了
五、安装nginx
用ssh连接到外网的服务器,输入下面命令开始安装编译工具和库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
安装PCRE,先到这个网站去复制最新的PCRE连接,然后使用wget命令下载安装,点击进入第一个
选择最顶上的这个最新的这个
点击选择后缀名为tar.gz
的这个
等待弹出下载选项,然后右键复制下载地址
复制到下载地址后,回到ssh连接外网服务器,使用wget命令下载PCRE
wget https://cytranet.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz
等待下载完成后,使用ls
命令查看下载到的文件,使用tar -zxvf
命令解压文件
ls
tar -zxvf pcre-8.45.tar.gz
解压完成后使用cd
命令进入安装包目录
cd cd pcre-8.45
运行下面命令进行编译安装
./configure
make && make install
下载nginx,首先进入这个网站复制nginx的最新的链接,然后右键复制稳定版的链接
进入到/usr/local/src/
目录
使用wget
命令下载最新稳定版nginx
wget https://nginx.org/download/nginx-1.22.0.tar.gz
使用ls
命令查看下载下来的压缩包,然后使用tar
命令解压下载下来的压缩包
ls
tar -zxvf nginx-1.22.0.tar.gz
使用cd
命令进入解压出来的文件夹内
cd nginx-1.22.0
依次输入以下命令开始编译安装
./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
使用以下命令可以查看nginx的版本,只要可以看到版本就说明已经安装成功了
/usr/local/webserver/nginx/sbin/nginx -v
下面就可以开始配置nginx的配置文件了,使用cd
命令进入配置文件夹,使用ls
命令查看所有文件,使用vi
命令编辑配置文件,按i
键开始编辑
cd /usr/local/webserver/nginx/conf/
ls
vi nginx.conf
i
以下是我的配置文件,可以参考以下,其实要改的地方就那么三个地方
#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;
# }
#}
}
配置文件配置好了之后按esc
,然后按:wq
回车保存并退出
输入以下命令启动nginx,如果启动没有报错的话就成功了
/usr/local/webserver/nginx/sbin/nginx
下面这几条命令是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