打开 vpn iptables 脚本间歇性失败

打开 vpn iptables 脚本间歇性失败

我是 vpn 设置和 iptables 的新手,并且对网络有基本的了解,但绝不是网络专家。

我正在设置一个 openvpn 路由器,以便我可以远程访问位于路由器后面的 plc。我使用 openvpn 云服务 Cloud Connexa 执行此操作。在本地,plc 的 ip 地址在 192.168.1.* 范围内。当我远程访问设备时,我希望它们的地址在 10.20.2.* 范围内。即在我电脑上的浏览器中,连接到 vpn 后,当我输入 10.20.2.19 时,它将显示 192.168.1.19 的 plc 的 Web 界面。此处显示了我的网络设置图。 网络设置

目前,这种方法可以正常工作,但是有时,当我尝试连接到网络上的设备时,我无法看到这些设备。为了解决这个问题,我使用不同的 openvpn 服务向设备添加了额外的 vpn 隧道。这使我可以通过 ssh 连接或调制解调器 Web 界面访问路由器。当我无法连接到网络上的设备时,我可以看到到路由器的 openvpn 连接已启动并在云连接状态页面上运行,我还可以看到 openvpn 连接正在路由器上运行(如果我使用第二个 vpn 服务访问路由器)。

所以我知道我的问题不是openvpn服务和路由器之间的电信连接,也不是身份验证问题,而是我的问题是ip路由或映射问题。

我的路由器有一个脚本,它作为设备上 openvpn 中的路由选项的一部分运行。该脚本有以下几行

#!/bin/sh
iptables -t nat -D PREROUTING -d '10.20.2.0/24' -i vpn1 -j NETMAP --to '192.168.1.0/24'
iptables -t nat -I PREROUTING -d '10.20.2.0/24' -i vpn1 -j NETMAP --to '192.168.1.0/24'
iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vpn1 -j NETMAP --to '10.20.2.0/24'
iptables -t nat -I POSTROUTING -s '192.168.1.0/24' -o vpn1 -j NETMAP --to '10.20.2.0/24'
iptables -t nat -D POSTROUTING -o lan1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lan1 -j MASQUERADE
#---------------------- for SNMP ---------------------------------------
iptables -t nat -D POSTROUTING ! -p icmp -s 172.16.0.0/16 -o vpn1 -j SNAT --to-source 10.20.2.234
iptables -t nat -I POSTROUTING ! -p icmp -s 172.16.0.0/16 -o vpn1 -j SNAT --to-source 10.20.2.234
#---------------------- for SNMP end -----------------------------------

我没有编写脚本,但我从以前工作的 openvpn 连接中复制并编辑了它。我对脚本的理解如下。脚本的前两行表示,任何从路由器外部进入并绑定到 10.20.2.* 地址的流量都应重新映射到 192.168.1.* 地址。接下来的两行表示,任何离开路由器并来自 192.168.1.* 地址的流量都应显示为来自 10.20.2.* 地址。我不太理解接下来的两行(带有伪装),但我的理解是这些行使局域网看起来像是 vpn 连接的一部分?

我认为最后两行有问题,主要是因为我不明白它们的作用。这些行在 --for snmp --- 之间有注释,这些行指的是 172.16.0.0./16 网络,但我不知道这个网络是什么?我觉得我应该将其更改为 100.96.1.32/28,因为这是分配给我的 openvpn 网络的 ipaddress,但我真的不明白这个 iptables 条目试图实现什么。

使用 ssh,我能够进入路由器并在设备不可见时使用 (iptables -t nat -n -L) 检查路由器上的 iptables 条目。当发生这种情况时,我可以看到

 NETMAP     all  --  0.0.0.0/0            10.20.2.0/24        192.168.1.0/24 

规则并不像我预期的那样存在于 iptables 中,因此我认为我的 scripup 脚本以某种方式失败了。

我希望对 vpn 和路由表有更深入理解的人能帮助我

  1. 明白最后两行是做什么的吗?
  2. 弄清楚这些行是否是导致我的设备无法定期访问的原因,或者我是否应该在其他地方查找可能是导致我的问题的原因。

干杯,

答案1

首先,简单网络管理协议是一种通过网络查询/修改某些设置的协议。路由器似乎支持 SNMP,为了能够通过 VPN 连接使用 SNMP,此行表示“对于来自网络 172.16.0.0/16 并进入 VPN 连接的所有流量(ICMP 协议除外),将源地址修改为 10.20.2.234”。这与您的 VPN 连接无关 - 阅读您的描述,您不使用网络范围 172.16.0.0/16 - 因此这些规则永远不会匹配,也永远不会应用。

一般来说,iptables -D如果存在则删除指定的规则,如果存在则iptables -I在表规则集的顶部插入一条规则。如果这些 iptables 规则已经存在,则这些重复项可能存在于脚本内部以避免错误。

MASQUERADE规则将把从该接口发出的所有流量的源地址替换lan1为此接口的地址。我不知道这是哪种接口,我猜是本地网络连接。

概述路由器的哪个接口正在执行什么操作将有助于理解这些 iptables 规则。例如:您的 VPN 连接是否始终具有接口名称vpn1?通常,这些数字是:第一个连接为 vpn0,第二个连接为 vpn1,等等。

您的连接问题的一个原因可能是您的路由器的 VPN 连接不时使用不同的接口名称建立......

相关内容