#1 楼
使用ssh是最简单的解决方案。ssh -g -L 8001:localhost:8000 -f -N user@remote-server.com
这会将您工作站上的本地端口8001转发到remote-server.com端口8000上的本地主机地址。
-g
表示允许网络上的其他客户端连接到我工作站上的端口8001。否则,只有工作站上的本地客户端可以连接到转发的端口。 -N
意味着我要做的只是转发端口,而不启动外壳。 -f
表示成功建立SSH连接并登录后进入后台。端口8001将为许多连接保持打开状态,直到ssh死掉或被杀死。如果您碰巧在Windows上,出色的SSH客户端PuTTY也可以做到这一点。使用8001作为本地端口,使用localhost:8000和目标,并在设置中添加本地端口转发。您可以在与PuTTY成功连接后添加它。
评论
user@remote-server.com是做什么的?绝对不需要端口转发,但是ssh要求使用此参数,而且还要尝试在此处进行连接。并将此讨厌的选项设置为主机名后,它输出…端口22:连接被拒绝(不,我没有使用22端口)。除非我丢失了某些内容,否则该命令显然是行不通的。
– Hi-Angel
16年1月1日于13:43
@ Hi-Angel user@remote-server.com只是一个示例,您不应从字面上理解它。您必须用要连接的计算机名称和此计算机上的用户名替换它。建立ssh连接需要此信息。只有在建立ssh连接后,才能通过此连接转发端口。
–彼得·多布罗格斯特(Piotr Dobrogost)
17年2月1日在23:45
如果您希望端口在引导时可用,请使用上述方法在systemd服务中查看“ autossh”-everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh
–理查德·霍利斯(Richard Hollis)
17-10-27在13:03
我也得到“连接被拒绝”。而且我仍然不明白为什么在不涉及SSH连接时(根据-N)为什么需要user@remote-server.com参数。应该只是转发数据包。
–亚历山大·泰勒(Alexander Taylor)
17年10月10日在7:42
@AlexanderTaylor -N并不意味着没有SSH连接。这仅表示不执行远程命令(请参见手册页)。
–user143943
18年4月18日在11:35
#2 楼
在服务器上使用socat
时:socat tcp-listen:8001,reuseaddr,fork tcp:localhost:8000
默认情况下,
socat
将在计算机上任何IPv4或IPv6地址(如果支持)上的TCP端口8001上侦听。您可以通过将tcp-listen
替换为tcp4-listen
或tcp6-listen
来将其限制为IPv4 / 6,或者通过添加,bind=that-address
来将其限制为特定的本地地址。与您代理的连接套接字相同,您可以使用任何地址代替
localhost
,如果要将地址解析限制为IPv4或IPv6地址,请用tcp
或tcp4
替换tcp6
。请注意,对于侦听端口8000的服务器,连接显示为来自代理(对于localhost
,将是localhost
),而不是原始客户端。您需要使用DNAT方法(但是这需要超级用户特权),服务器才能知道谁是客户端。评论
谢谢,这很好,因为您不必运行本地ssh服务器。
– jontro
2015年12月15日15:11
我可以使用相同的端口但使用不同的地址吗?
–阿莫斯
17年2月14日在4:35
@amos,请参阅编辑。
–StéphaneChazelas
17年2月14日在18:23
是否还可以仅转发来自特定IP的流量?
– Phate
18年8月23日在18:05
@Phate,请参见告诉socat监听来自单个IP地址的连接(以及socat手册页中的range和tcpwrap选项)。
–StéphaneChazelas
18年8月23日在18:38
#3 楼
使用传统的nc
是最简单的解决方案:nc -l -p 8001 -c "nc 127.0.0.1 8000"
此版本的
nc
在Ubuntu的netcat-traditional
软件包中。 (您必须update-alternatives
或将其命名为nc.traditional
。)请注意,与ssh相比,它未加密。如果您在一台主机之外使用它,请记住这一点。
评论
有人知道netcat-openbsd上的等效功能吗?
– Sridhar Sarnobat
17年7月23日在18:20
busybox中包含的netcat版本的模拟:nc -v -lk -p 8001 -e / usr / bin / nc 127.0.0.18000。(参数说明)
–伊凡·科尔米切克(Ivan Kolmychek)
18年3月16日在13:30
工作正常,但是nc命令在第一个远程连接后结束。如果需要保持运行,请添加-k。
– Sopalajo de Arrierez
18年6月20日在23:49
我收到此错误:nc:在CentOS 6.4上不能使用-p和-l。有没有解决的办法?
–尼克·普雷迪
18年7月16日在15:52
与ssh相比,我更喜欢这种解决方案,因为当需要本地转发特权端口时,它更易于用作root用户。
–基督徒
18年8月15日在0:58
#4 楼
默认情况下,OpenBSD netcat在Linux和OS X上都可用。OSX:
mkfifo a
mkfifo b
nc 127.0.0.1 8000 < b > a &
nc -l 8001 < a > b &
Linux:
mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
在OS X bash上有效的另一种方法是使用双向管道。它可能适用于其他Unix:
nc 127.0.0.1 8000 <&1 | nc -l 8001 >&0
评论
起初我没有注意到您正在使用openbsd netcat。这比必须从Ubuntu软件包中安装另一个netcat更好。
– RobertR
15年2月26日在15:24
OpenBSD示例在Ubuntu 15.04上失败。使用shell重定向,netcat无法打开端口进行监听,如ss -tan或netstat -tan所示。
–贾斯汀C
2015年9月3日,0:12
⁺¹。 FTR:另一种方法可在Ubuntu上使用
– Hi-Angel
16-11-30在10:41
我不明白您的解决方案。你能解释一下吗?
–三角龙
17年9月19日在8:21
@trismegistos在这些示例中,netcat侦听器和客户端将输入重定向到某些共享文件(mkfifo管道..先进先出),并将这些共享文件用作其输入/输出的源/目标,从而有效地创建了隧道。通常使用客户端/侦听器,但是某些使用客户端+客户端/侦听器+侦听器的技术-wiki.securityweekly.com/…,必须阅读slideshare.net/amiable_indian/secrets-of-top-pentesters。
– Info5ek
17-10-4在18:02
#5 楼
iptables -t nat -A PREROUTING -p tcp --dport <origin-port> -j REDIRECT --to-port <destination-port>
service iptables save
service iptables restart
评论
在尝试连接到dport时,如nc -v localhost 2345一样,我得到了Connection拒绝。我在iptables中不是很好,但是我猜dport必须有一个监听应用程序。
– Hi-Angel
16年1月1日在12:49
如果origin-port与目标端口位于不同的接口上怎么办?
–三角龙
17年9月19日在8:19
#6 楼
在ServerFault上引用David Spillett的答案这是一个简单的二进制文件,采用格式为
bindaddress bindport connectaddress connectport
的配置文件,例如:
192.168.1.1 8001 127.0.0.1 8000
或
0.0.0.0 8001 127.0.0.1 8000
如果要将输入端口绑定到所有接口。
#7 楼
根据Mark A.的回答,我必须进行一些小调整才能使其在Mac上运行(至少在macOS Mojave版本10.14.4上)。/>那个printf语句似乎很关键。否则,连接到端口8000的netcat命令将永远不会真正尝试连接,而监听端口8001的netcat命令也将永远不会真正监听端口8001。如果没有printf,每次尝试连接端口8001时,我都会连接被拒绝。
我的假设是netcat必须在实际执行任何Socket操作之前以某种方式阻塞stdin(也许出于某种原因试图读取它)。因此,如果没有将printf语句写入fifo a,netcat命令将永远不会开始在端口8001上侦听。还没有。
#8 楼
这是在服务器上建立两个udp端口的新方法:https://github.com/9crk/udpeer
udpeer 8001 8002
要测试:
nc -u xxxx.com 8001
nc -u xxxx.com 8002
评论
netcat可以做到这一点。有什么可以在Android设备上运行的吗?还是Android的限制阻止了这种解决方案?