当前位置: 首页 > news >正文

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

一、前言

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

  • 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

相关文章:

  • 【深度学习实验】图像处理(四):PIL——自定义图像数据增强操作(图像合成;图像融合(高斯掩码))
  • Xshell全局去除提示音
  • 阿里云ACE认证之国际版与国内版对比!
  • Java数据结构之《构造哈夫曼树》题目
  • 使用FFmpeg开发2-比特流过滤器
  • 解决浏览器缓存问题
  • bean依赖属性配置
  • [最优化理论] 梯度下降法 + 精确线搜索(单峰区间搜索 + 黄金分割)C++ 代码
  • 软件工程 - 第8章 面向对象建模 - 2 静态建模
  • 08_Collection集合2
  • 关于我离破500粉丝感受
  • Vue3中reactive和ref对比
  • 二叉树的基本操作实现包括创建二叉树、插入节点、搜索节点、删除节点、遍历二叉树等详解
  • Python安装步骤介绍
  • 【无标题】心灯
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Consul Config 使用Git做版本控制的实现
  • Create React App 使用
  • ES6简单总结(搭配简单的讲解和小案例)
  • Javascript编码规范
  • JavaScript函数式编程(一)
  • Java多线程(4):使用线程池执行定时任务
  • learning koa2.x
  • Linux Process Manage
  • Redux 中间件分析
  • spring学习第二天
  • webpack+react项目初体验——记录我的webpack环境配置
  • Zsh 开发指南(第十四篇 文件读写)
  • 分类模型——Logistics Regression
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于springcloud Gateway中的限流
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何在GitHub上创建个人博客
  •  一套莫尔斯电报听写、翻译系统
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • NLPIR智能语义技术让大数据挖掘更简单
  • scrapy中间件源码分析及常用中间件大全
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1)bark-ml
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十) 初识 Docker file
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)关于pipe()的详细解析
  • ..回顾17,展望18
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接