Linux:调整传入连接


0

设置:PC I(Ubuntu 11.10,具有sudo),Mac T(OS X 10.7.2,具有sudo),智能设备S(几乎可配置)。

小号可以看到在本地网络上,但并非可以看到牛逼T可以看到对方。

有一个程序在端口N上的T上侦听。如果有人连接到该程序并且不说其专有协议或在连接时不说任何内容,则该程序将关闭,并且必须手动重新启动。

S必须在端口N上连接到T并与程序对话。实际的IP S连接到是可配置的。

我看到我必须建立从I端口NT端口N的某种中继,但是到目前为止,我仍然无法确定该怎么做。欢迎提示。

临时解决方案(例如,使用一些特殊密钥运行ssh)比“永久”解决方案(例如配置iptables或其他)更可取,因为这是一个临时性问题。

Answers:


1

在“ I”上设置远程反向ssh隧道,以将自身的端口“ N”重定向到“ T”上的端口“ N”。这样,机器S可以通过“ I”连接到“ T”。

如果“ N”是例如端口8080,则可以在“ I”上手动将其设置为

ssh -R 8080:IpofT:8080 localhost

如果需要,可以添加-N,-f,-n和-v。请参见ssh手册页。

可能存在一些安全问题。例如,如果端口“ N”是您需要root用户特权的较低范围的端口,则sudo会这样做。

同样,默认情况下,许多Ubuntu服务器也不允许外部IP重定向。可以通过配置/etc/ssh/ssh.conf并设置来切换

GatewayPorts yes

要自动执行登录,您还可以在计算机“ I”上将自己的ssh密钥添加到“ I”上的authorized_keys2文件中(通过本地主机登录时)。您还可以设置cronjobs来测试ssh作业是否正在运行,以及终止/重新启动它。

或者,您可以进行设置,以使机器“ T”登录到机器“ I”并通过隧道将流量传输到自身(尽管不熟悉osx上的ssh工具集)

     ssh -R 8080:localhost:8080 username@IPofI

有关在Ubuntu上进行端口转发/隧道化的更多信息


1

Okey,没有注意到您宁愿不使用iptables。安装后socat,您可以在I上创建这样的端口转发器:

        "LOCAL/LISTEN"   PORT        "TARGET" DEST : PORT
sudo socat TCP4-LISTEN:N,reuseaddr,fork   TCP4:T:N

喜欢

sudo socat TCP4-LISTEN:888,reuseaddr,fork TCP4:1.2.3.4:888

有关更多信息,请参见socat手册页。

这是进行端口目标NAT(网络地址转换)的iptables方法。

# allow forwarding
sysctl -w net.ipv4.ip_forward=1

# forward port 888 to host 1.2.3.4:888 
iptables -I PREROUTING -t nat -p tcp  --dport 888 -j DNAT --to 1.2.3.4:888

# most likely you'll need this to get routing back to your device to work.
# try without this first.
iptables -I POSTROUTING -t nat -j MASQUERADE

有点“安全”的版本,您可以在其中定义允许连接/转发的网络

# forward port 888 to host 1.2.3.4:888 allowd from net 2.2.2.0/24
iptables -I PREROUTING -t nat -p tcp -s 2.2.2.0/24  --dport 888 -j DNAT --to 1.2.3.4:888
iptables -I POSTROUTING -t nat -s 2.2.2.0/24 -j MASQUERADE

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.