Linux【7】-远程连接-5-内网穿透之frp
这个问题困扰了很久,连接所里的服务器,因为存在内网穿透的问题,用过teamviewer,用过向日葵,但效果都不是太理想,看到frp后,简直是碉堡了。
下载地址:
https://github.com/fatedier/frp/releases
一、通过 ssh 访问公司内网机器
- 将 frps 及 frps.ini 放到具有公网 IP 的机器上。(我用的是阿里云服务器)
- 将 frpc 及 frpc.ini 放到处于内网环境的机器上。(所里的服务器)
服务器端配置(阿里云服务器)
frps.ini
[common]
bind_port = 7000
vhost_http_port = 8081
[web]
type = http
custom_domains = local.maven.javablog.net
auth_token = admin123
[ssh]
listen_port = 6000
auth_token = admin123
[common]
dashboard_port = 7500
# dashboard 用户名密码可选,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin123
最简化的版本
# frps.ini
[common]
bind_port = 7000
启动 frps:
./frps -c ./frps.ini
ssh服务客户端配置(所里的服务器)
frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx #公网服务器的公网 IP
server_port = 7000
auth_token = admin123
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
启动 frpc:
./frpc -c ./frpc.ini
通过 ssh 访问内网机器,假设用户名为 test:
ssh -oPort=6000 test@x.x.x.x
开机启动
阿里云服务器 server /etc/rc.local
nohup /root/frp_0.9.3_linux_amd64/frps -c /root/frp_0.9.3_linux_amd64/frps.ini > /dev/null 2>&1 &
需要穿透内网的服务器 client /etc/rc.local (暂停一分钟为了保证网络正常才执行启动命令)
/bin/sleep 1m
nohup /root/frp_0.9.3_linux_amd64/frpc -c /root/frp_0.9.3_linux_amd64/frpc.ini > /dev/null 2>&1 &
三、通过域名访问内网
Sometimes we want to expose a local web service behind a NAT network to others for testing with your own domain name and unfortunately we can’t resolve a domain name to a local ip.
However, we can expose a http or https service using frp.
Modify frps.ini, configure http port 8080:(具有公网的)
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
Start frps:
./frps -c ./frps.ini
Modify frpc.ini and set remote frps server’s IP as x.x.x.x. The local_port is the port of your web service:(需要被访问的内网的服务器)
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80 #可以换成内网需要公开的端口
custom_domains = www.yourdomain.com #可以换成公网的ip地址
Start frpc:
./frpc -c ./frpc.ini
Resolve A record of www.yourdomain.com to IP x.x.x.x or CNAME record to your origin domain.
Now visit your local web service using url http://www.yourdomain.com:8080. 或者 http://公网ip:8080就可以访问 内网的80端口的网页。。。
这个很赞额。
四、讨论
4.1 报错1:
dial tcp getsockopt: connection refused frp
因为把所里的当作对外的服务器了,frps.ini应该是放在具有公网IP的服务器上,刚开始没有理解清楚
4.2 报错2:
cannot execute binary file错误的解决办法
1.文件的所有者和所有者所在组没有权限操作这个文件。
可以用chown命令修改该文件的所有者和所有组,具体用法如下: chown -R root:root filename,-R表示循环递归的将目录下的所有文件都修改其所有者和所在组,前一个root所用户名,后一个root表示组。
2.32bits和64bits:系统都有所需的软件类型,64位和32位,如果64位用到了32位上就会出现这个问题。解决办法,下载可用版本。 解决办法:下载版本不对。mac下载darwin版本
4.3 frp居然还能远程下载东西,太神了
scp -oPort=5000 user@ip:/mnt/nfs/datP/FEP-3-2-sam-2/g02-ve.zip ./
PS
必须得说,frp这个工作太强大了
参考资料
- https://github.com/fatedier/frp/blob/master/README_zh.md#%E9%80%9A%E8%BF%87-ssh-%E8%AE%BF%E9%97%AE%E5%85%AC%E5%8F%B8%E5%86%85%E7%BD%91%E6%9C%BA%E5%99%A8
- https://javablog.net/page/267/frp-reverse-proxy-implementation-of-network-penetration-through-open-ssh-and-http-service-example.html (赞)
- http://www.jianshu.com/p/e8e26bcc6fe6
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn