跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。
未分類
2020 年 11 月 25 日

服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。

服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。

資深大佬 : FreeEx 3

前言

你是否遇到过这样的场景,服务器不能上网,但是又需要安装某个软件,面对如蛛网般杂乱的 rpm 包依赖关系,放弃或许是最好的选择,这样你就不必再为无法完成工作而痛苦又懊恼。

但是今天,你有了一个更好的选择。

4DNAT

4DNAT 取名源自 4 和 DNAT 。这个工具工作在 OSI 模型的第四层传输层,同时 4 和 for 谐音,意为专门为目标地址转换而服务的工具。4DNAT 使用 go 语言开发,具有天然的跨平台性,并且完全使用 go 标准库开发,没有任何的第三方依赖,编译之后只有一个二进制可执行文件。它有 4 种工作模式:

转发模式

接受两个参数,监听端口和目标地址,在监听端口接收到请求后会主动连接目标地址,示例:

./4dnat -forward 2222 192.168.1.100:22 

监听模式

接受两个参数,监听端口 1 和监听端口 2,并交换两个端口接收到的数据,示例:

./4dnat -listen 10000 10001 

代理人模式

接受两个参数,目标地址 1 和目标地址 2,启动后会主动连接这两个目标地址,并交换两个端口接收到的数据,示例:

./4dnat -agent 127.0.0.1:10000 127.0.0.1:22 

http/https 代理模式

接受两个参数或四个参数,代理类型、监听端口、证书路径和私钥路径,示例:

http 代理

./4dnat -proxy http 1080 

https 代理

./4dnat -proxy https 1080 server.crt server.key 

使用场景

场景一

期望可以在用户电脑上直接访问目标服务器上的 3306 端口,跳板机器是一台 Windows 机器,没办法做 ssh 端口转发。 服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。

单向虚线箭头表示可以单向访问,反之不行。

使用 4DNAT 在跳板机器上执行如下命令做端口转发

# 本地监听 3307 端口,接收到请求后主动连接 10.1.0.40 的 3306 端口 ./4dnat -forward 3307 10.1.0.40:3306 

在用户电脑上访问172.16.0.30:3307即等同于访问10.1.0.40:3306,于是就可以在用户电脑愉快的访问目标机器上的服务啦。

场景二

期望目标目标机器可以上网,如使用 yum 安装软件。 服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。

  1. 在用户电脑上开启一个 http 代理
./4dnat -proxy http 1080 
  1. 在跳板机器上使用监听模式监听两个端口,用于交换数据
./4dnat -listen 10000 10001 
  1. 在目标机器上使用监听模式监听两个端口,用于交换数据
./4dnat -listen 20000 20001 
  1. 在用户电脑上使用代理人模式主动连接两个目标地址,用于交换数据
./4dnat -agent 127.0.0.1:1080 172.16.0.30:10000 
  1. 在跳板机器上使用代理人模式主动连接两个目标地址,用于交换数据
./4dnat -agent 127.0.0.1:10001 10.1.0.40:20000 
  1. 在目标机器上修改代理
cat <<EOF >> /etc/profile http_proxy=http://127.0.0.1:20001 https_proxy=http://127.0.0.1:20001 export http_proxy https_proxy EOF  source /etc/profile 
  1. 在目标机器上测试访问互联网
curl https://typesafe.cn 

最后奉上项目地址 https://github.com/dushixiang/4dnat

本文首发我的微信公众号:我在对面的角落

服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。

大佬有話說 (35)

  • 資深大佬 : westoy

    然后因为违反公司或者合作方的保密条例, 被 fire 了…….

  • 資深大佬 : wtks1

    如果是专门用跳板机 /堡垒机做的限制,搞这个就是在作死啊…

  • 資深大佬 : opengps

    使用场景里,有哪些典型?实在想象不出太正规的用法来

  • 主 資深大佬 : FreeEx

    @westoy 哈哈,保密要求比较严格的公司,提供给用户可操作的机器也是不能上网的

  • 主 資深大佬 : FreeEx

    @wtks1 主要是针对不具备上网条件的服务器,例如还没有弄专线,但是得着手安装应用了

  • 主 資深大佬 : FreeEx

    @opengps 黑客经常会用这种手段渗透内网机器,不过只是一种工具,针对需要的场景还是挺好用的。
    例如需要在 Windows 上配置端口转发,或者 Linux 上不会写 DNAT 规则。
    例如某些不具备上网条件的服务器,还没有来得及弄专线,但是得着手安装应用了。

  • 主 資深大佬 : FreeEx

    主要是为了突出功能才设计了第二种场景哈,不合规的操作还是不要做。

  • 資深大佬 : Tumblr

    这是教人作恶啊。。。如 @westoy #1 所说,这是触碰红线的操作。
    在公司给你隔离网络的时候,必然会提供内部的 repository 。即使没有内部的 repo,也应该是通过正常渠道来申请上网权限而不是用主所谓的「这个工具」。

  • 資深大佬 : jianzhao123

    工具是来用的,主只是开发了个工具,跟人拿去怎么用没关系吧……反正我挺支持 lz 。

  • 資深大佬 : tikazyq

    为啥不用 squid

  • 資深大佬 : boris93

    给不允许上公网的机器打洞?
    头几天小米那事还没学习够?

  • 資深大佬 : boris93

    @jianzhao123 #9 话是没错,自己的某台电脑因故不能连公网,自己又可以承担打洞带来的后果,那当然没问题
    但是主这个场景明显是以违反公司安全制度为前提,那就不行

  • 資深大佬 : Tumblr

    @jianzhao123 #9 如果只是推广个工具,丢个链接,那我同样也支持。
    但是主拿一个明显触碰红线的场景来作为示例,就好像卖菜刀明明是可以拿切菜来示范的,却拿杀人当示例,这就不合适了。

  • 資深大佬 : optional

    都没受过合规培训的学生们吧? 在正规的公司工作,合规是第一位的。

  • 資深大佬 : akira

    东西挺好的,就是这个例子不大合适,换一个吧

  • 資深大佬 : user20190708

    离线安装
    1. 插 DVD 碟可以使用 yum 方式离线安装大部分常用软件;
    2. 在另一台能联网的 相同操作系统 相同版本的机器上 yum –downloadonly 下载安装包,拷贝到目标机器执行安装。

  • 資深大佬 : DoctorCat

    跳板机也限制外网访问呀,你这代理在生产域外那就失去作用了

  • 主 資深大佬 : FreeEx

    @Tumblr
    @akira

    说的很有道理,我想个更好的场景替代一下吧。

  • 資深大佬 : muzuiget

    没看到有啥优势,纯端口转发,Windows 可以用自带 netsh,Linux/MacOS 可以用 socat,甚至 ssh 都行。

  • 資深大佬 : ljlljl0

    例子:笔记本电脑可以上网,服务器不可以上网。
    目的,服务器与笔记本业务口连接,借助电脑上网功能进行升级或者提供给外部用户临时的 ip 访问功能。
    主,这个能实现不,不借助中间跳板。

  • 資深大佬 : lishen226

    不是有好多打洞工具吗,这个轮子的优势在哪里?

  • 資深大佬 : letitbesqzr

    我经常遇到的情况:服务器 npm 或者 yum 一些三方源,需要“代理”才能够稳定连上…

    感觉最简单的还是把本地的“飞机”端口,直接用 ssh 映射到远程服务器上… xshell 等工具都能够很方便图形化的配置

  • 主 資深大佬 : FreeEx

    @ljlljl0 上网的可以参考我设计的第二个场景,请按照公司的规章制度使用。
    提供给外部用户临时的 ip 访问功能
    1. 本地使用 listen 模式监听两个端口
    2. 本地使用 agent 模式 第一个参数为第一步监听的任意一个端口,第二个参数为服务器的 IP 和端口
    3. 访问第一步本地监听的另一个地址+端口即可

  • 主 資深大佬 : FreeEx

    @ljlljl0 上网的可以参考我设计的第二个场景,请按照公司的规章制度使用。
    提供给外部用户临时的 ip 访问功能我上面写错了,不能删除。
    用转发模式就行 ./4dnat -forward 8080 server:80

  • 主 資深大佬 : FreeEx

    @muzuiget 不光是端口转发,对于那些隐藏在 nat 背后的机器,想要相互通信,仅仅是依靠端口转发就做不到了。

  • 主 資深大佬 : FreeEx

    @lishen226 代码比较少,如果去掉 http 代理的功能不到 150 行吧

  • 資深大佬 : ljlljl0

    @FreeEx 我是个人用,你那个不还得加个中间服务器嘛。。。。我只需要笔记本和服务器就上网那种能实现不

  • 主 資深大佬 : FreeEx

    @ljlljl0 可以的
    如果服务器能访问你的笔记本,直接在笔记本上代理。
    如果服务器不能访问你的笔记本,首先在服务器上以 listen 模式监听两个端口,笔记本上启动代理,笔记本上以 agent 模式连接本地代理地址和服务器监听的任意一个地址,配置服务器代理为第一步监听的另一个端口

  • 資深大佬 : efaun

    @jianzhao123 #9 快播也是这样想的 服务器不允许上网并且需要跳板机才能访问?学会使用这个工具,轻松让服务器使用 yum。

  • 資深大佬 : AGEGG

    我记得 centos 的话可以下载 centos 的全量软件包,然后配置 yum 源到本地实现。
    不过很多内部不允许上网的公司常用软件内部有经过检验和打包好有文档的软件包

  • 資深大佬 : Bootis

    可以,傻瓜式很好用,赞了

  • 資深大佬 : doveyoung

    啊这……
    不知道从哪儿说起

  • 資深大佬 : cpstar

    四层转发而已么?没有什么协议包装之类的?
    其实有点像在跳板机上开 tunnel,只不过恰好跳板机没有 ssh
    场景一其实就是往里进,ssh tunnel 的事情,既然跳板机能安装 4dnat 了,那搞个 sshd 好像问题不大
    场景二算是往外出,可以说与场景一一样开 tunnel,方向恰好相反,tunnel 到用户电脑的 http proxy 上

  • 主 資深大佬 : FreeEx

    @cpstar 中间有的机器可能是 windows,而且 ssh 的 tun 没有重连。我写的这个操作比较傻瓜,命令简单,代码也少,分享一下

  • 資深大佬 : qfdk

    算了算了还是别用了 免得审查的时候出问题. 过来人的警告

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具