【服务部署】常用内网穿透方案

一、前言

由于一些开发及使用需求,需要将内网机器端口映射到公网,达到公网访问内网环境的目的
本文主要介绍几种常用的内网穿透方案

  • ssh远程端口转发
    • 部署简单,无需额外安装软件包
  • frp反向代理
    • 功能配置丰富,部署相对复杂,需要额外安装软件包

二、ssh远程端口转发

1、说明

整体流程示意如下,内网机器通过ssh隧道与公网机器连接在一起,当用户访问公网机器指定端口时,公网机器把数据通过管道传输到内网机器,从而实现公网访问内网环境的目的

在这里插入图片描述

示例在内网机器上建立ssh连接,将公网机器8080端口绑定到内网机器80端口,所有发送给公网机器8080端口的数据,都会通过ssh隧道转发给内网机器80端口进行最终处理

2、配置
2.1、公网机器配置
  • 配置sshd,开启GatewayPorts配置,允许端口转发
sed -i "s|#GatewayPorts no|GatewayPorts yes|" /etc/ssh/sshd_config
systemctl restart sshd
  • 关闭防火墙或者开放监听端口访问
2.2、内网机器配置

内网机器执行命令,配置ssh端口转发:ssh -NTf -R {remote-ip}:{remote-port}:{local-ip}:{local-port} root@{remote-ip} -p {remote-ssh-port}

  • -N:表示只连接远程主机,不打开远程shell
  • -T:表示不为这个连接分配TTY
  • -f:表示连接成功后,转入后台运行
  • -R:表示将端口绑定到远程服务器,反向代理
  • -p:默认为22端口,当远程服务器ssh端口非22端口时,需要单独指定
内网机器
[root@node253 ~]# ssh -NTf -R 8080:192.168.122.253:80 root@107.172.217.97 -p 22
[root@node253 ~]# lsof -i:80
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1143 root    7u  IPv4  28235      0t0  TCP *:http (LISTEN)
[root@node253 ~]# curl 127.0.0.1:80
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title></title><link rel="shortcut icon" href=./favicon.ico><link href=./statics/css/app.46205092776a9bbb475848bede343ea8.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./statics/js/manifest.b09c107ad7fca7006ebf.js></script><script type=text/javascript src=./statics/js/vendor.52b14d12c6e40d435cf2.js></script><script type=text/javascript src=./statics/js/app.9c4b7074a0a0c7993553.js></script></body><script></script></html>

公网机器
[root@node78 ~]# lsof -i:8080
COMMAND  PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
sshd    5070 root    8u  IPv4 253167552      0t0  TCP *:multiling-http (LISTEN)
[root@node78 ~]# curl 107.172.217.97:8080
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title></title><link rel="shortcut icon" href=./favicon.ico><link href=./statics/css/app.46205092776a9bbb475848bede343ea8.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./statics/js/manifest.b09c107ad7fca7006ebf.js></script><script type=text/javascript src=./statics/js/vendor.52b14d12c6e40d435cf2.js></script><script type=text/javascript src=./statics/js/app.9c4b7074a0a0c7993553.js></script></body><script></script></html>

注:内网机器网络不稳定时,ssh连接可能会被断开,需要再次发起ssh连接操作。如网络恶劣,可改用autossh进行连接(当ssh连接中断时,自动发起重连)

软件安装:

sudo yum install wget gcc make
wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
tar -xf autossh-1.4e.tgz
cd autossh-1.4e
./configure
make
sudo make install

三、frp反向代理

1、说明

参考官方文档:gofrp.org

软件包github地址:fatedier/frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

节点类型节点IP地址角色
公网机器66.66.67.227frps
内网机器107.172.217.97frpc
2、部署配置

需要将内网机器7480端口映射到公网机器8080端口提供访问

2.1、frps部署

公网机器执行以下操作部署frps

[root@node97 ~]# wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
[root@node97 ~]# tar -zxvf frp_0.38.0_linux_amd64.tar.gz
[root@node97 ~]# cd frp_0.38.0_linux_amd64
[root@node97 frp_0.38.0_linux_amd64]# cat frps.ini 
[common]
bind_port = 7000
[root@node97 frp_0.38.0_linux_amd64]# ./frps -c frps.ini

注:如需长时间运行,可搭配screen 一起使用

2.2、frpc部署

内网机器执行以下操作部署frpc

[root@node227 ~]# wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
[root@node227 ~]# tar -zxvf frp_0.38.0_linux_amd64.tar.gz
[root@node227 ~]# cd frp_0.38.0_linux_amd64
[root@node227 frp_0.38.0_linux_amd64]# cat frpc.ini 
[common]
server_addr = 107.172.217.95
server_port = 7000

[radosgw]
type = tcp
local_ip = 66.66.67.227
local_port = 7480
remote_port = 8080
[root@node227 frp_0.38.0_linux_amd64]# ./frpc -c frpc.ini 
  • server_addr:frps节点IP地址
  • server_port:frps节点通信端口,默认为7000
  • type:代理类型,如tcp、udp、http、https等
  • local_ip:frpc节点IP地址
  • local_port:frpc节点服务端口
  • remote_port:frps节点监听端口,当frps节点remote_port 被访问时,相关流量会被转到到frpc节点local_ip对应端口local_port
  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值