内网穿透也叫做内网映射,也叫“NAT穿透”。就是让外网能访问你的内网;把自己的内网(主机)当成服务器,让外网能访问。下面是我用过的两种内网穿透。个人认为FRP更好用些
| 工具 | 特点 |
|---|---|
| 花生壳 | 赠送一个域名(但名称就稀奇古怪的),免费两个映射(http、UDP、TCP可选),每月有1G的免费流量。有图形化界面配置。 |
| FRP | 需要自己搭建服务端和客户端 。支持各种流量转发,客户端和服务端需要在配置文件中配置。同时可以在web端查看当前配置的详细信息。 |
此处略。
2、安装客户端根据自己的机器下载适合的客户端 https://hsk.oray.com/download,选择对应的版本,提供了下载命令,复制就好。
以centos7为例
#下载 wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz #授权 chmod u+x phddns_5.2.0_amd64.rpm #安装 rpm -ivh phddns_5.2.0_amd64.rpm
安装好后会提示Phtunnel Service Install Success。记得保存好SN 和 password ,在关联的时候需要用到。3、账号和客户端进行关联
登录花生壳官网,点击右上角'管理平台',点击'设备列表','添加设备',此处就用到了安装完成时的'SN'。 此时完成了账号和客户端的关联。建议下载APP使用,方便直观。4、配置访问地址
点击'内网穿透',点击'新增映射',剩下的就是根据自己的需求进行配置了,每月有1G的免费流量可以用。映射类型可用的有TCP、UDP、HTTP(免费) 以上是免费的花生壳使用方法,我用这个方法对搭建在树莓派上的私有云盘进行内网映射, 优点是免费,简单易配置。缺点是,流量不够用,并且只能配置HTTP,HTTPS需要氪金。所以我转用了FRP。三:FRP内网穿透 1、Github上下载服务器版本对应的包
#选择适合的版本包 ,下载后将包分别放到服务器和客户端。 https://github.com/fatedier/frp/releases/ #下载 https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.33.0_linux_amd64.tar.gz2、服务端配置FRP
#解压后进入目录 tar -zxvf frp_0.33.0_linux_amd64.tar.gz -C /opt/ cd /opt/frp_0.33.0_linux_amd64/ #解压后的目录
#服务端
vi frps.ini
[common]
# frp监听的端口
bind_port = 7000
# 授权码,客户端配置文件中需要和这个一致 ,自己修改,配置复杂一点
token = 123456
# frp管理后台端口
dashboard_port = 7500
# frp的web管理后台用户名和密码,自己修改
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
启动服务端
cd /opt/frp_0.33.0_linux_amd64/ #启动命令 nohup ./frps -c frps.ini & #或者注册系统服务,不需要在进入目录启动。 sudo mkdir -p /etc/frp sudo cp frps.ini /etc/frp sudo cp frps /usr/bin sudo cp systemd/frps.service /usr/lib/systemd/system/ sudo systemctl enable frps sudo systemctl start frps3、客户端配置FRP
#前面下载的包,传输一份到内网客户端(需要穿透的机器)
cd /opt/frp_0.33.0_linux_amd64/
vi frpc.ini
# 客户端配置
[common]
server_addr = frps_ip #根据实际修改
server_port = 7000
token = 123456 #与frps.ini的token一致
[ssh] #此处配置一个对ssh端口的穿透,同样道理可以配置 http服务
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
#客户端启动
nohup ./frpc -c frpc.ini &
注意:服务端防火墙中需要的开通的端口都放开!!!
下面附上客户端配置文件详解,根据需求自行配置
[common] #服务器的IP地址 server_addr = frps_ip #服务监听端口 server_port = 7000 #这个和服务端的token保持一致 token = 123456 # 客户端日志 log_file = ./frpc.log # 指定日志文件; log_level = info # 指定日志等级; log_max_days = 3 # 设置管理地址,用于通过http api控制frpc的动作,如重新加载; admin_addr = 127.0.0.1 admin_port = 7400 admin_user = admin admin_passwd = admin # 初始连接池的数量,默认为0; #pool_count = 5 # 是否启用tcp复用,默认为true; tcp_mux = true # frpc的用户名,用于区别不用frpc的代理; #user = your_name # 首次登录失败时退出程序,否则连续重新登录到frps; login_fail_exit = true # 用于连接服务器的协议,支持tcp、kcp、websocket; protocol = tcp # 为frp 客户端指定一个单独的DNS服务器; #dns_server = 8.8.8.8 # 要启用的代理的名字,默认为空表示所有代理; # start = ssh,dns # 心跳检查 # heartbeat_interval = 30 # 失败重试次数 # heartbeat_timeout = 90 # 超时时间 #TCP的配置随便加 [ssh_home] # 协议默认tcp,可选tcp,udp,http,https,stcp,xtcp; type = tcp # 本地地址 local_ip = 127.0.0.1 # 本地端口 local_port = 3389 # 在服务器端开启的远程端口; remote_port = 8021 # 是否加密服务端和客户端的通信信息,默认为不加密; use_encryption = false # 是否开启压缩,默认不开启; use_compression = false # 负载均衡配置 #group = test_group # 负载均衡组名,会将同一组内的客户端进行负载; #group_key = 123456 # 负载均衡组密钥; [web2] # 协议默认tcp,可选tcp,udp,http,https,stcp,xtcp; type = tcp # 本地地址 local_ip = 127.0.0.1 # 本地端口 local_port = 80 # 在服务器端开启的远程端口; remote_port= 8811 # 是否加密服务端和客户端的通信信息,默认为不加密; use_encryption = false # 是否开启压缩,默认不开启; use_compression = false # 负载均衡配置 #group = test_group # 负载均衡组名,会将同一组内的客户端进行负载; #group_key = 123456 # 负载均衡组密钥; #https和http 的端口在服务器上面已经定好了的,所以这里不能指定 [web] type = https local_ip = 127.0.0.1 local_port = 88 # 是否加密服务端和客户端的通信信息,默认为不加密; use_encryption = false # 是否开启压缩,默认不开启; use_compression = true # 访问web页面启用认证,用户名admin http_user = admin # 密码 http_pwd = admin # 子域名,需要服务端配置了subdomain_host参数; #subdomain = web01 # web的域名,和subdomain二选一 custom_domains = domains.online # 指定用于路由的URL前缀; #locations = /,/pic # 配置http包头域名重写; host_header_rewrite = example.com # 添加包头信息X-From-Where: frp; header_X-From-Where = frp [web1] type = http local_ip = 127.0.0.1 local_port = 80 custom_domains = domain.online4、配置启动脚本,测试地址
假设我的公网服务器地址是66.66.77.88 ,那么我可以通过 ssh 66.66.77.88 6000 访问到基于上面配置的那台内网机器。



