设置:PC我(Ubuntu 11.10,有 sudo),Mac电视(OS X 10.7.2,有 sudo),智能设备年代(几乎无法配置)。
年代可以看到我在本地网络上,但看不到电视。我和电视可以互相看到。
有一个程序可以监听电视在港口否如果有人连接到该程序但不使用它的专有协议或在连接时不说任何话,该程序就会关闭,并且必须手动重新启动。
年代必须连接到电视在港口否并与程序对话。实际 IP年代连接到是可配置的。
我知道我必须设置某种中继我, 港口否到电视, 港口否,但目前我还不知道该怎么做。欢迎提供提示。
临时解决方案(例如,使用一些花哨的密钥运行 ssh)比“永久”解决方案(如配置 iptables 等)更可取,因为这是一个临时问题。
答案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 文件中(当您通过 localhost 登录时)。您还可以设置 cronjobs 来测试 ssh 作业是否正在运行,以及终止/重新启动它。
或者,您可以进行设置,以便机器“T”登录到机器“I”并将流量隧道传输到自身(尽管不熟悉 osx 上的 ssh 工具集)
ssh -R 8080:localhost:8080 username@IPofI
更多信息Ubuntu 上的端口转发/隧道
答案2
好的,我没注意到你不喜欢使用 iptables。安装后socat
,你可以像这样创建端口转发器我:
"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
这是执行端口目标 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
答案3
看起来就这么简单:
用户@I$ ssh -LI:N:T:N 用户@T