在 Open-Mesh 上使用 iptables 进行端口转发

在 Open-Mesh 上使用 iptables 进行端口转发

对于那些不熟悉 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 是内部接口。

相关内容