对于那些不熟悉 Open-Mesh 的人来说,这是一个快速概述:
该系统使用小型无线接入点,自动构建自己的网状网络。只要其中一个接入点通过有线 LAN 连接到互联网(使该接入点成为“网关”),所有接入点(及其无线客户端)都可以访问互联网。
接入点运行 OpenWRT 的修改版本。
通常,通过 SSH 访问任何无线接入点(节点)的唯一方法是首先通过 SSH 访问网关,然后从那里通过 SSH 连接到节点。
我正在尝试做的事情:直接打开/转发 SSH 端口到每个无线节点。
例如,我的网关位于10.45.13.220
我的 LAN 上。第一个无线节点位于5.12.252.248
网状网络上(即登录网关时键入将打开无线节点的外壳)。我希望能够像这样登录无线节点:ssh [email protected]
$ ssh -p 11001 [email protected]
iptables
所以我尝试使用以下命令转发该端口:
$ iptables -t nat -A PREROUTING -p tcp -d 10.45.13.220 --dport 11001 \
-j DNAT --to-destination 5.12.252.248:22
$ iptables -t filter -A FORWARD -p tcp -d 5.12.252.248 --dport 22 -j ACCEPT`
我知道这是在做某物因为当我在输入上述命令之前尝试通过 SSH 连接10.45.13.220:11001
(从网络上的另一台计算机)时,连接被拒绝。但一旦输入命令,连接超时。
知道我做错了什么吗?我对 很陌生iptables
,但这似乎应该非常简单。
笔记:IP转发已经启用
编辑:记录结果
在为 @slm 建议的两条规则设置日志记录后,dmesg
当我尝试从另一个 Linux 机器连接到 10.45.13.220:11001 时,会出现以下情况:
[1015021.850000] IN=br-lan1 OUT= MAC=ac:86:74:0c:fd:00:6c:62:6d:12:85:9d:08:00 \
SRC=10.45.13.246 DST=10.45.13.220 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=16916 DF \
PROTO=TCP SPT=41908 DPT=11001 WINDOW=14600 RES=0x00 SYN URGP=0
[1015021.850000] IN=br-lan1 OUT=br-lan1 MAC=ac:86:74:0c:fd:00:6c:62:6d:12:85:9d:08:00 \
SRC=10.45.13.246 DST=5.12.252.248 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16916 DF \
PROTO=TCP SPT=41908 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0
[1015022.850000] IN=br-lan1 OUT=br-lan1 MAC=ac:86:74:0c:fd:00:6c:62:6d:12:85:9d:08:00 \
RC=10.45.13.246 DST=5.12.252.248 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=16917 DF \
PROTO=TCP SPT=41908 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0
使用新的 iptables 规则(根据 @slm 的建议):
iptables -t nat -A PREROUTING -p tcp --dport 11001 -j LOG --log-level debug
iptables -t nat -A PREROUTING -p tcp --dport 11001 -j DNAT --to 5.12.252.248:22
iptables -A FORWARD -i br-lan1 -p tcp -j LOG --log-level debug
iptables -A FORWARD -i br-lan1 -o bat0.2@bat0 -p tcp -d 5.12.252.248 --dport 22 \
-j ACCEPT
答案1
这对于 来说是不必要的ssh
。您可以通过一台主机 ssh 到另一台主机,如下所示:
$ ssh -t serverA ssh serverB
例子
$ hostname
grinchy
$ ssh -t skinner ssh mulder
Last login: Fri Aug 16 18:19:56 2013 from skinner.somedom.net
$ hostname
mulder.somedom.net
$
iptables
如果你绝对想转发端口,我相信这条规则可以做到:
$ iptables -t nat -A PREROUTING -p tcp -d 10.45.13.220 --dport 11001 -j DNAT --to 5.12.252.248:22
$ iptables -A FORWARD -i eth1 -o eth0 -p tcp -d 5.12.252.248 --dport 22 -j ACCEPT
其中 eth1 是外部接口,eth0 是内部接口。