介绍
由于前面内网穿透&反向代理(奇技淫巧)有一些局限性,所以继续研究内网穿透和反向代理的原理,把整个穿透和代理的过程算是捋清楚了。进而找到了最标准、稳定的解决方案。
这里采用frp+nginx来实现功能。
安装nginx
参考:
http://www.cnblogs.com/2bjiujiu/p/8117166.html
https://www.2cto.com/kf/201801/711202.html
- 安装nginx的依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
- 获取压缩包
wget -q http://nginx.org/download/nginx-1.16.0.tar.gz
- 解压
tar -zxvf nginx-1.16.0.tar.gz
- 配置和安装
cd nginx-1.16.0
./configure --prefix=/opt/nginx1.16.0
make
make install
ln -sf /opt/nginx1.16.0 /usr/local/nginx
echo 'export PATH=/usr/local/nginx/sbin:$PATH' >> /etc/profile && source /etc/profile
- 测试和启动
nginx -t # 显示successful
nginx # 启动
netstat -lntup | grep 80 # 检查
# 打开浏览器,访问 ip:80
nginx反向代理
参考:https://segmentfault.com/a/1190000016556569
nginx的反向代理是用一个端口监听另一个端口,比如这里已经开了一个80的默认nginx服务,我想让外面访问43005就相当于访问80端口。即43005代理了80。
这是个基本功能,直接修改 nginx/conf/nginx.conf就好:
# 在http下加上下面这些
# listen表示外网访问的端口
# server_name是本地被访问的ip
# proxy_pass是被代理的ip和端口
server {
listen 43005;
server_name localhost;
location / {
proxy_pass http://localhost:80;
}
}
配置完后先测试 nginx -t
然后平滑重启 nginx -s reload
浏览器访问106.x.x.x:43005
就会访问到80的服务
- 如果端口被占用
使用ps -aux | grep 8888
或者netstat –apn
查看是哪个进程占用了端口。
然后用kill pid
把进程杀了。 - 如果要停止
pkill -9 nginx
参考:https://www.cnblogs.com/codingcloud/p/5095066.html
使用frp实现ssh穿透
参考:
https://github.com/fatedier/frp#access-your-computer-in-lan-by-ssh
# 下包 可以去https://github.com/fatedier/frp/releases下载最新版
wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.27.0_linux_amd64.tar.gz
- 修改服务端 frps.ini
[common]
bind_port = 7000 # 监听的端口B
开启服务端./frps -c ./frps.ini
- 修改客户端 frpc.ini
[common]
server_addr = x.x.x.x # 填写公网的server ip
server_port = 7000 #服务端监听的端口B
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22 # 本地被监听的端口
remote_port = 43006 # 公网对外的访问端口
开启客户端./frpc -c ./frpc.ini
使用frp实现service穿透
- 修改frps.ini# frps.ini
[common]
bind_port = 7000
vhost_http_port = 43005
Start服务端./frps -c ./frps.ini
- 修改frpc.ini and . The local_port is the port of your web service:
[common]
server_addr = x.x.x.x # set remote frps server's IP as x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com # 没有域名就用上面的server addr
开启frpc./frpc -c ./frpc.ini
- 浏览器访问ip:43005.
其他配置可以参考:https://www.xyzbeta.com/460
frp实现ftp
修改frpc.ini
[test_static_file]
type = tcp
remote_port = 43762
plugin = static_file
plugin_local_path = /root/test # 设置路径
plugin_strip_prefix = static #设置域名
plugin_http_user = user
plugin_http_passwd = pwd