你是否遇到过这样的场景,服务器不能上网,但是又需要安装某个软件,面对如蛛网般杂乱的 rpm 包依赖关系,放弃或许是最好的选择,这样你就不必再为无法完成工作而痛苦又懊恼。
但是今天,你有了一个更好的选择。
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
接受两个参数或四个参数,代理类型、监听端口、证书路径和私钥路径,示例:
./4dnat -proxy http 1080
./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 安装软件。
./4dnat -proxy http 1080
./4dnat -listen 10000 10001
./4dnat -listen 20000 20001
./4dnat -agent 127.0.0.1:1080 172.16.0.30:10000
./4dnat -agent 127.0.0.1:10001 10.1.0.40:20000
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
curl https://typesafe.cn
最后奉上项目地址 https://github.com/dushixiang/4dnat
本文首发我的微信公众号:我在对面的角落
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.