如何將本地埠映射到無SSH訪問的遠程埠?

分享于 

4分钟阅读

电脑

  简体 双语

问题:

我想解决的问题

我有一个不想更改的配置文件,因为它是在许多人之间共享的,由它的他人管理。 它有类似于以下内容的条目:


serviceAlpha: localhost:8081


serviceBravo: localhost:8082


serviceCharlie: localhost:8083


...



我想让本地端口映射到远程主机和端口,不需要通过SSH登录( 隧道)。

举个例子:


localhost:8081 -> serviceAlpha:8080


localhost:8082 -> serviceBravo:8080


localhost:8083 -> serviceCharlie:8080


...



我尝试过

我读到 /etc/hosts 无法解决这个问题。

我已经尝试使用 pf ( 请参见这里的 。):


echo"


rdr pass inet proto tcp from any to any port 8081 -> serviceAlpha port 8080


" | sudo pfctl -ef -



当我运行 pfctl -s nat 时,我得到:


No ALTQ support in kernel


ALTQ related functions disabled


rdr pass inet proto tcp from any to any port = 8081 -> ww.xx.yy.zz port 8080



当我跑步时 curl -X GET http://localhost:8081/ 我知道 Failed to connect to localhost port 8081: Operation timed out127.0.0.1 替换 localhost 时也会发生。

当我跑步时 curl -X GET http://ww.xx.yy.zz:8080/ 我得到了预期的响应。

我还尝试了各种 socat 命令,包括:


socat tcp-listen:8081 tcp:ww.xx.yy.zz:8080


curl -X GET http://127.0.0.1:8081/health


> curl: (7) Failed to connect to 127.0.0.1 port 8081: Operation timed out



socat tcp:127.0.0.1:8081 tcp:ww.xx.yy.zz:8080


curl -X GET http://127.0.0.1:8081/health


> curl: (7) Failed to connect to 127.0.0.1 port 8081: Operation timed out


> socat: 2019/02/14 16:27:02 socat[31221] E connect(5, LEN=16 AF=2 127.0.0.1:8081, 16): Operation timed out




回答 1:

实现这一点的一种方法是使用 Apachemod_proxy。 你可以在这里查看如何设置 mod_proxy的完整教程 ( 虽然它是针对Linux的,但是设置的步骤应该类似)。 特别检查配置Apache代理

所以我认为你可以为每个服务设置虚拟主机,并设置apache来听 8081.8082.8083。

每个虚拟主机配置的外观如下所示:


Listen 8081


<VirtualHost *:8081>


 ProxyPreserveHost On



 # setup the proxy


 <Proxy *>


 Order allow,deny


 Allow from all


 </Proxy>


 ProxyPass/http://ww.xx.yy.zz:8080/


 ProxyPassReverse/http://ww.xx.yy.zz:8080/


</VirtualHost>




回答 2:

你想要的命令是 iptables。 下面列出了这些命令:


echo"1">/proc/sys/net/ipv4/ip_forward


iptables -t nat -A PREROUTING -i lo -p tcp --dport 8081 -j REDIRECT --to-destination 2.2.2.2:8080


iptables -t nat -A POSTROUTING -j MASQUERADE



我不相信你可以将主机名放入目标位置,但你可以尝试。 这些更改不是持久的;你需要将它们放入运行时运行的脚本中,以便持久化。



acc  LOC  Local  SSH