如何将端口从一台机器转发到另一台机器?


19

请考虑以下情况:

在家里,我有一个路由器(已连接到Internet),服务器(S)和主机(M)。S可以从互联网访问(它具有静态IP),并且24/7可达,而M则不能。

有时,我想使某些应用程序(可以监听M的某个端口,例如8888)可以从外部互联网访问。

为此,我想在S(2222)上设置一些端口以转发到M的端口8888,以便访问S:2222的任何人都感觉自己正在访问M:8888。

我尝试使用ssh端口转发,我的最佳尝试如下:

ssh -L 2222:M:8888 -N M

但这仅允许我从服务器本身而不是其他计算机访问2222端口。

有什么办法可以正确地做到这一点吗?最好是,我希望它是一个简单的命令,当我不再需要转发时,可以使用^ C启动和关闭它。


尝试localhost.run这是一个网站,你可以得到localhost.run我觉得有一种方法让你的产品在那里..
Angelena Neilsomt

Answers:


16

是的,这GatewayPorts在SSH中称为。摘录自ssh_config(5)

GatewayPorts
        Specifies whether remote hosts are allowed to connect to local
        forwarded ports.  By default, ssh(1) binds local port forwardings
        to the loopback address.  This prevents other remote hosts from
        connecting to forwarded ports.  GatewayPorts can be used to spec‐
        ify that ssh should bind local port forwardings to the wildcard
        address, thus allowing remote hosts to connect to forwarded
        ports.  The argument must be “yes” or “no”.  The default is “no”.

而且,您可以使用localhost而不是M在转发中,因为您可以将您转发到SSH所连接的同一台计算机上-如果我正确理解了您的问题。

因此,命令将变为:

ssh -L 2222:localhost:8888 -N -o GatewayPorts=yes hostname-of-M

看起来像这样netstat -nltp

tcp        0      0    0.0.0.0:2222   0.0.0.0:*  LISTEN  5113/ssh

现在,任何在此端口2222 TCP上访问此计算机的人实际上都将与在机器M中看到的localhost:8888进行通信。请注意,这与向M的端口8888的普通转发不同。


1
谢谢!这样可行!但是有一些奇怪的地方-由于某种原因,输出包含“ bind:地址已在使用中”行。那是什么意思?
罗加奇

1
您已经在该端口上运行了一些进程。使用相同的netstat命令找出确切的内容。可能还有另一个类似的SSH仍在后台运行,并使用PID netstat告诉您将其杀死。
gertvdijk 2012年

有趣的是,我已经这样做了-在S和M上的那些端口上都没有任何进程。如果有进程,则整个构造可能无法正常工作。
罗加奇(Rogach)2012年

10

还有另一种方法。您可以使用iptables设置从S:2222到W:8888的端口转发。单个命令:

iptables -t nat -A PREROUTING -p tcp --dport 2222 \
         -j DNAT --to-destination 1.2.3.4:8888

其中1.2.3.4是M的IP地址。它称为NAT(网络地址转换)。


1
由于您仅在此处进行目标NAT(与源NAT相反),因此只能在特定情况下可靠地工作,并且可能需要修改路由表。但是,为了转发到主机(S)上运行的虚拟机(M),这可能会很好地工作。
gertvdijk 2012年

此命令应在网关上发出。我假设S和M在同一局域网中。源NAT将由现代Linux内核中的连接跟踪器自动完成。我的办公室网络中有这样的配置,它运行完美。但是,可以使命令更具体(例如,告诉iptables -i eth0,其中eth0是外部接口)。
Gevial

如果S和M在同一个LAN上,则无需在那里进行端口转发,因为它们之间没有流量通过网关。
gertvdijk 2012年

1
是的,但是我想是通过Internet建立的,连接到M:8888。有人从Internet-> S:2222-> M和S带有iptables的LAN路由器-> M:8888
Gevial

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.