我正在运行路由器DD-WRT。在我的网络中,我有一个网络存储运行OpenSSH 服务器。我希望能够访问OpenSSH 服务器从外面局域网。
这是通过添加规则来实现的iptables
路由器已配置:
- OpenVPN 客户端
- 动态域名解析
假设:
<routerIp>
内部路由器 IP<routerPort>
路由器上用于监听传入流量的端口<nasIP>
内部 NAS IP<nasPort>
NAS 上的 OpenSSH 服务器端口
目前我有<routerPort>
==<nasPort>
我必须:
- 打开一个端口路由器
- 将进入此端口的流量路由至网络存储。
应该完成这个任务但不起作用的规则是:
iptables -A FORWARD -i tun1 -p tcp -d <nasIP> --dport <nasPort> -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -d <routerIp> --dport <routerPort> -j DNAT --to-destination <nasIP>:<nasPort>
参考:
- 端口转发到特定的 LAN_IP - DD-WRT Wiki - iptables
- Iptables 将所有流量转发到指定端口,转发到另一台设备
- 使用 iptables 转发 ssh
- 将 SSH 转发到另一台主机
根据 RalfFriedl 的回答进行编辑:
将规则更改为:
iptables -A FORWARD -i tun1 -p tcp -d <nasIP> --dport <nasPort> -j ACCEPT
iptables -t nat -A PREROUTING -i tun1 -p tcp --dport <nasPort> -j DNAT --to-destination <nasIP>:<nasPort>
但也没有用
我怎样才能获取外部IP?
编辑输出ip a
:
1: lo: mtu 65536 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: imq0: mtu 1500 qdisc fq_codel qlen 30
link/void
3: imq1: mtu 16000 qdisc fq_codel qlen 11000
link/void
4: eth0: mtu 1492 qdisc htb qlen 1000
link/ether dc:ef:09:f2:87:e9 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.3/24 brd 192.168.100.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::deef:9ff:fef2:87e9/64 scope link
valid_lft forever preferred_lft forever
5: eth1: mtu 1500 qdisc fq_codel master br0 qlen 1000
link/ether dc:ef:09:f2:87:e8 brd ff:ff:ff:ff:ff:ff
inet6 fe80::deef:9ff:fef2:87e8/64 scope link
valid_lft forever preferred_lft forever
6: teql0: mtu 1500 qdisc noop qlen 100
link/void
19: ip6tnl0@NONE: mtu 1452 qdisc noop
link/tunnel6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
20: br0: mtu 1500 qdisc noqueue
link/ether dc:ef:09:f2:87:e8 brd ff:ff:ff:ff:ff:ff
inet 169.254.255.1/16 brd 169.254.255.255 scope global br0:0
valid_lft forever preferred_lft forever
inet 192.168.2.1/24 brd 192.168.2.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::deef:9ff:fef2:87e8/64 scope link
valid_lft forever preferred_lft forever
21: ath0: mtu 1500 qdisc noqueue master br0
link/ether 0a:b1:2c:d4:5e:f0 brd ff:ff:ff:ff:ff:ff
inet6 fe80::8b1:2cff:fed4:5ef0/64 scope link
valid_lft forever preferred_lft forever
22: ath0.1: mtu 1500 qdisc noqueue
link/ether 08:b1:2c:d4:5e:f0 brd ff:ff:ff:ff:ff:ff
inet 172.16.1.1/24 brd 172.16.1.255 scope global ath0.1
valid_lft forever preferred_lft forever
inet6 fe80::ab1:2cff:fed4:5ef0/64 scope link
valid_lft forever preferred_lft forever
23: ath1: mtu 1500 qdisc noqueue master br0
link/ether dc:ef:09:f2:87:eb brd ff:ff:ff:ff:ff:ff
inet6 fe80::deef:9ff:fef2:87eb/64 scope link
valid_lft forever preferred_lft forever
24: tun1: mtu 1500 qdisc fq_codel qlen 100
link/[65534]
inet 10.128.250.xxx/16 brd 10.128.255.xxx scope global tun1
valid_lft forever preferred_lft forever
答案1
您的第二条规则包含-d <routerIp>
但根据您的描述,是内部路由器IP。
来自外部的数据包不会到达内部 IP。如果您的外部 IP 是静态的,您可以插入您的外部 IP,否则只需指定外部接口(似乎是)tun1
,否则您还必须调整第一条规则。
答案2
正如 RalfFriedl 正确指出的那样,由于我正在连接到 VPN 提供商,我应该登录网站并在我的个人资料下添加我想要使用的端口。
此后,规则如下:
iptables -A FORWARD -i tun1 -p tcp -d <nasIP> --dport <nasPort> -j ACCEPT
iptables -t nat -I PREROUTING -i tun1 -p tcp --dport <nasPort> -j DNAT --to-destination <nasIP>
我过去已经做过几十次的事情了……