Linux【10】-远程连接4-内网穿透之frp

这个问题困扰了很久,连接所里的服务器,因为存在内网穿透的问题,用过teamviewer,用过向日葵,但效果都不是太理想,看到frp后,简直是碉堡了。

下载地址:

https://github.com/fatedier/frp/releases

一、通过 ssh 访问公司内网机器

  1. 将 frps 及 frps.ini 放到具有公网 IP 的机器上。(我用的是阿里云服务器)
  2. 将 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端口的网页。。。

这个很赞额。

四、讨论

报错1:dial tcp getsockopt: connection refused frp

因为把所里的当作对外的服务器了,frps.ini应该是放在具有公网IP的服务器上,刚开始没有理解清楚

报错2:cannot execute binary file错误的解决办法

1.文件的所有者和所有者所在组没有权限操作这个文件。

可以用chown命令修改该文件的所有者和所有组,具体用法如下: chown -R root:root filename,-R表示循环递归的将目录下的所有文件都修改其所有者和所在组,前一个root所用户名,后一个root表示组。

2.32bits和64bits:系统都有所需的软件类型,64位和32位,如果64位用到了32位上就会出现这个问题。解决办法,下载可用版本。 解决办法:下载版本不对。mac下载darwin版本

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

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学