在 DD-WRT 上启用 OpenVPN 客户端时,远程 SSH 访问不起作用

在 DD-WRT 上启用 OpenVPN 客户端时,远程 SSH 访问不起作用

我有一台 DD-WRT 路由器,我想通过 SSH 远程访问它。DD-WRT 位于 ADSL 路由器后面,该路由器启用了端口 22 的端口转发,DD-WRT SSH 访问和服务也设置为端口 22。远程访问工作正常。但是,DD-WRT 应该永久连接到 VPN 服务器(使用内置的 OpenVPN 客户端)。

OpenVPN 连接工作正常,但远程 SSH 访问仅在 VPN 客户端被禁用时才有效。

我读到这可能与通过 VPN 网关路由出站的所有流量有关,包括通过 WAN 传入的流量。我是否需要为通过 WAN 传入的请求定义自定义 iptables 设置,以便也通过 WAN 进行响应?如果是,我该怎么做?如果不是,我还能做什么?

我在端口 8080 的 Web GUI 和端口 1723 的 PPTP VPN 服务器遇到了类似的问题,因此我认为该问题与 SSH 无关。

以下是我的设置细节:

设备:

  • TP-Link W8151N ADSL路由器
  • TP-Link WR1043ND 路由器,带 DD-WRT 25544

IP 地址:

  • ADSL路由器外置: 115.x.x.x
  • ADSL路由器内部: 192.168.1.1
  • DD-WRT WAN IP: 192.168.1.100(来自 ADSL 路由器)
  • DD-WRT IP: 192.168.10.1
  • DD-WRT IP 外部(VPN): 119.x.x.x
  • 指向 ADSL 路由器连接的 DDNS 别名: 115.x.x.x

配置:

  • ADSL 路由器已激活 22/8080 端口转发功能,DDNS 至192.168.1.100
  • DD-WRT 设置为允许在 8080 进行远程 GUI 管理,也可以从远程 IP 和 22 进行 SSH 访问,在服务中激活 SSH,也在 22 进行。
  • DD-WRT 使用“服务”选项卡中的内置客户端功能连接到 OpenVPN

编辑于 3 月 5 日:在此期间我尝试过:

在 OpenVPN 客户端设置中的基于策略的路由字段中添加以下内容(想法:来自 WAN ip 的流量应路由回 WAN 接口、vlan2 或 ppp0):

ip rule add from 192.168.1.1 table 200
ip route add default via 192.168.1.1 dev vlan2 table 200
ip route flush cache

结果:VPN 连接建立后,我也无法再访问 GUI 和 Web。我的路由器设置为在无法访问 Google DNS 三分钟后重新启动,因此三分钟后我可以再次访问 GUI 和 Web,但只能等到 VPN 连接恢复后才能访问。

我采用这种方法是否完全错误?

答案1

我对基于策略的路由不满意,所以经过一整个周末的研究,我得到了这个。

如果您尝试针对 WAN IP 进行 SSH,数据包确实会到达路由器,但是,由于所有 OUTPUT 流量都通过 VPN(接口tun0)转移,因此 SSH 不会成功。

缺少的是一个 OUTPUT 规则,用于通过接口(即直接连接到互联网的接口)iptables路由端口上的流量22vlan2

# Create table 202 via the Gateway Ip on the Interface VLAN2
ip route add default via $(nvram get wan_gateway) dev vlan2 table 202

# Apply the rule on table 202 to packages marked with 22
ip rule add fwmark 22 table 202

# Tag with 22 every output package on port 22 not coming from any  machine in the local network
iptables -t mangle -I OUTPUT -p tcp --sport 22 -d ! 192.168.1.0/24 -j  MARK --set-mark 22

请注意,最后一个命令会跳过来自本地网络(在我的情况下是 192.168.1.0/24)的包,原因是当从本地主机进行 SSH 时,包应该通过br0而不是进行路由vlan2

首先在路由器的命令行中发出这些命令,以确保它们正常工作,如果它们以某种方式破坏了你的路由,重新启动将清除它们。一旦确保它们正常工作,您就可以将它们添加到路由器的防火墙脚本中

DD-WRT 配置 请注意,我的配置 IP 和端口是不同的,因为我没有使用默认值。

答案2

在 DD-WRT 中,转到服务 --> VPN --> OpenVPN 客户端 -->基于策略的路由,为每个要通过 VPN 隧道路由流量的客户端添加一行,例如

    192.168.10.20/32
    192.168.10.21/32
    ...

因此,OpenVPN 客户端不再通过隧道路由所有流量,因此也再次打开了 WAN。我现在运行 VPN 客户端,同时仍然能够通过 WAN 的 IP 或 DDNS 别名通过 SSH / PPTP / GUI 进入路由器。

(可能有比为每个客户端添加一行更聪明的方法,但是我尝试的所有不同的网络掩码都导致路由器根本无法访问,所以我最终为我的 DHCP 范围内的所有 IP 添加了一行。)

相关内容