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

2020-11-22 15:08:14 +08:00
 FreeEx

前言

你是否遇到过这样的场景,服务器不能上网,但是又需要安装某个软件,面对如蛛网般杂乱的 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 端口转发。

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

使用 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 安装软件。

  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

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

5550 次点击
所在节点    分享创造
35 条回复
westoy
2020-11-22 15:09:58 +08:00
然后因为违反公司或者合作方的保密条例, 被 fire 了.......
wtks1
2020-11-22 15:13:18 +08:00
如果是专门用跳板机 /堡垒机做的限制,搞这个就是在作死啊...
opengps
2020-11-22 15:18:32 +08:00
使用场景里,有哪些典型?实在想象不出太正规的用法来
FreeEx
2020-11-22 15:24:50 +08:00
@westoy 哈哈,保密要求比较严格的公司,提供给用户可操作的机器也是不能上网的
FreeEx
2020-11-22 15:27:06 +08:00
@wtks1 主要是针对不具备上网条件的服务器,例如还没有弄专线,但是得着手安装应用了
FreeEx
2020-11-22 15:30:19 +08:00
@opengps 黑客经常会用这种手段渗透内网机器,不过只是一种工具,针对需要的场景还是挺好用的。
例如需要在 Windows 上配置端口转发,或者 Linux 上不会写 DNAT 规则。
例如某些不具备上网条件的服务器,还没有来得及弄专线,但是得着手安装应用了。
FreeEx
2020-11-22 15:32:09 +08:00
主要是为了突出功能才设计了第二种场景哈,不合规的操作还是不要做。
Tumblr
2020-11-22 15:47:39 +08:00
这是教人作恶啊。。。如 @westoy #1 所说,这是触碰红线的操作。
在公司给你隔离网络的时候,必然会提供内部的 repository 。即使没有内部的 repo,也应该是通过正常渠道来申请上网权限而不是用楼主所谓的「这个工具」。
jianzhao123
2020-11-22 16:27:03 +08:00
工具是来用的,楼主只是开发了个工具,跟人拿去怎么用没关系吧……反正我挺支持 lz 。
tikazyq
2020-11-22 16:30:38 +08:00
为啥不用 squid
boris93
2020-11-22 16:39:10 +08:00
给不允许上公网的机器打洞?
头几天小米那事还没学习够?
boris93
2020-11-22 16:40:34 +08:00
@jianzhao123 #9 话是没错,自己的某台电脑因故不能连公网,自己又可以承担打洞带来的后果,那当然没问题
但是楼主这个场景明显是以违反公司安全制度为前提,那就不行
Tumblr
2020-11-22 17:01:57 +08:00
@jianzhao123 #9 如果只是推广个工具,丢个链接,那我同样也支持。
但是楼主拿一个明显触碰红线的场景来作为示例,就好像卖菜刀明明是可以拿切菜来示范的,却拿杀人当示例,这就不合适了。
optional
2020-11-22 17:18:32 +08:00
都没受过合规培训的学生们吧? 在正规的公司工作,合规是第一位的。
akira
2020-11-22 18:06:18 +08:00
东西挺好的,就是这个例子不大合适,换一个吧
user20190708
2020-11-22 18:17:38 +08:00
离线安装
1. 插 DVD 碟可以使用 yum 方式离线安装大部分常用软件;
2. 在另一台能联网的 相同操作系统 相同版本的机器上 yum --downloadonly 下载安装包,拷贝到目标机器执行安装。
DoctorCat
2020-11-22 18:55:06 +08:00
跳板机也限制外网访问呀,你这代理在生产域外那就失去作用了
FreeEx
2020-11-22 19:41:09 +08:00
@Tumblr
@akira

说的很有道理,我想个更好的场景替代一下吧。
muzuiget
2020-11-22 20:30:32 +08:00
没看到有啥优势,纯端口转发,Windows 可以用自带 netsh,Linux/MacOS 可以用 socat,甚至 ssh 都行。
ljlljl0
2020-11-22 21:13:25 +08:00
例子:笔记本电脑可以上网,服务器不可以上网。
目的,服务器与笔记本业务口连接,借助电脑上网功能进行升级或者提供给外部用户临时的 ip 访问功能。
楼主,这个能实现不,不借助中间跳板。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728049

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX