前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用goproxy实现内网穿透 原

使用goproxy实现内网穿透 原

作者头像
阿dai学长
发布2019-04-03 10:26:02
4.8K0
发布2019-04-03 10:26:02
举报
文章被收录于专栏:阿dai_linux阿dai_linux

原理

内网穿透由三部分组成:Control端(A)、bridge&server端(B)、agent端(C)。Control与server通过bridge进行桥接。

系统:centos7 A:内网ip10.9.102.33(V**) B:公网ip 123.206.66.166 内网ip10.9.102.28(V**) C:内网ip 192.168.228.129(无外网ip,能访问外网)

需求

使A能通过B连接到(ssh)C机器的22端口。

实现

使用工具:goproxy 官方地址:https://github.com/snail007/goproxy

部署

安装goproxy

分别在B和C上安装goproxy工具。 百度云下载地址:链接: https://pan.baidu.com/s/1c56eYi 密码: zk4u

自动安装:
curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | bash   

手动安装(安装前自己创建部署目录):
mkdir /home/proxy
cd /home/proxy
##下载守护进程monexec
wget https://github.com/reddec/monexec/releases/download/v0.1.1/monexec_0.1.1_linux_amd64.tar.gz

##下载proxy
wget https://github.com/snail007/goproxy/releases/download/v3.7/proxy-linux-amd64.tar.gz

##下载自动安装脚本:
wget https://raw.githubusercontent.com/snail007/goproxy/master/install.sh

##安装
/bin/bash install.sh

配置内网穿透

B机器

##创建proxy的公钥和私钥文件
proxy keygen

##建立端口映射
proxy tbridge -p ":33080" -C proxy.crt -K proxy.key --daemon
proxy tserver -r ":2202@:22" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key --daemon
//参数的详细解释看官方文档

完成!

C机器

##拷贝B机器的公钥和秘钥文件:
scp 123.206.66.166:/usr/local/src/goproxy/proxy.key /home/proxy/

##建立映射
proxy tclient -P "123.206.66.166:33080" -C proxy.crt -K proxy.key

Done!

连接

A机器通过B连接A:22:

##远程连接测试
ssh -p 2202 root@123.206.66.166
//-p:指定端口(默认是22端口)

password:输入C机器的密码即可!

goproxy部署demo

首先先安装proxy,在bridge端生成公钥proxy.crt和proxy.key,并拷贝到agent机器上;同时将控制机Control的公钥放入agent机器的“.ssh/authorized_keys”文件,为后续ssh密钥登陆做准备。

bridge&server部署

开启bridge服务:
proxy tbridge -p ":33080" -C proxy.crt -K proxy.key

开启server服务:
proxy server -r ":port@[HOSTNAME]:22” -P "127.0.0.1:33080" -C proxy.crt -K proxy.key  --daemon

agent部署

主机名

开放端口

内网ip

office01

22021

192.168.2.251

office02

22022

192.168.2.252

office03

22023

192.168.2.253

proxy client  —k HOSTNAME -P "123.59.66.166:33080" -C proxy.crt -K proxy.key --daemon

依次在agent机器执行该命令(注意更换HOSTNAME)。

配置control机器ssh端口转发

普通转发:
[root@control ~]$ vi /root/.ssh/config
Host office03
    IdentityFile ~/.ssh/id_rsa
    HostName 123.59.66.166
    Port 22023
    
配置完成后登陆方式:  
[root@control ~]$ ssh user@office03


使用proxycommand实现转发:
Host dxx.sxx-bastion   //代理主机
    Hostname 123.59.66.166  //代理主机ip
    Port 22023  //代理端口
Host    office03   //被代理主机
    HostName    192.168.3.253  //被代理主机内网ip
    ProxyCommand    ssh dxx.sxx-bastion -W %h:%p  //代理命令
    IdentityFile    ~/.ssh/id_rsa  //远程control机器的私钥  
##注:使用proxycommand的目的是使内网ip暴露出来,使其能被加以利用。

配置完成后的连接方式:  
ssh user@office03

该部分可优化!!!

加入systemctl管理

因为proxy没有自带的进程管理脚本,为了方便使用将其加入systemctl服务管理。

  • bridge&server服务器
#goproxy_bridge
[root@bridge ~]# cat /usr/lib/systemd/system/goproxy_bridge.service 
[Unit]
Description=Goproxy Bridge Service
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/usr/bin/proxy bridge -p ":33080" -C /home/proxy/proxy.crt -K /home/proxy/proxy.key
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target

#goproxy_server
#启动脚本
[root@bridge ~]# vi /home/proxy/goproxy_server.sh
#!/bin/bash
#Written 2017-12-06
#Using for starting server of goproxy
/usr/bin/proxy server -r ":22023@[office03]:22" -r ":22022@[office02]:22" -r ":22021@[office01]:22" -P "127.0.0.1:33080" -C /home/proxy/proxy.crt -K /home/proxy/proxy.key

[root@bridge ~]# chmod 755 /home/proxy/goproxy_server.sh

[root@bridge ~]# cat /usr/lib/systemd/system/goproxy_server.service 
[Unit]
Description=Goproxy Server Service
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/home/proxy/goproxy_server.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
//使用脚本的目的是避免启动程序的参数在status暴露

  • agent机器
#启动脚本
[root@office03 ~]# cat /home/proxy/goproxy_client.sh 
#!/bin/bash
#Written 2017-12-06
#Using for starting proxy
/usr/bin/proxy client --k $HOSTNAME -P "123.59.66.166:33080" -C /home/proxy/proxy.crt -K /home/proxy/proxy.key

#加入systemctl
[root@office03 ~]# cat /usr/lib/systemd/system/goproxy_client.service 
[Unit]
Description=Goproxy Client Service
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/home/proxy/goproxy_client.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target

  • 管理命令:
systemctl start/status/stop unit(服务名称)

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/11/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理
  • 需求
  • 实现
    • 部署
      • 安装goproxy
      • 配置内网穿透
    • 连接
      • goproxy部署demo
        • bridge&server部署
        • agent部署
      • 配置control机器ssh端口转发
        • 加入systemctl管理
    相关产品与服务
    VPN 连接
    VPN 连接(VPN Connections)是一种基于网络隧道技术,实现本地数据中心与腾讯云上资源连通的传输服务,它能帮您在 Internet 上快速构建一条安全、可靠的加密通道。VPN 连接具有配置简单,云端配置实时生效、可靠性高等特点,其网关可用性达到 99.95%,保证稳定、持续的业务连接,帮您轻松实现异地容灾、混合云部署等复杂业务场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档