Netfilter - LAN -> VPN 客户端

Netfilter - LAN -> VPN 客户端

我有一个远程办公室,其中有一个运行 OpenVPN 的防火墙,客户端可以连接到该防火墙。

防火墙接口:
* eth0 - 1.2.3.4(公共)
* br0 - 192.168.1.1(/24)
* tun0 - 192.168.254.1(/24,VPN 客户端)

因此 VPN 客户端 192.168.254.0/24 可以看到 192.168.1.0/24,尽管它们并不需要。但我确实需要 192.168.1.0/24 来与 VPN 客户端通信。从防火墙本身,我可以通过 SSH 连接到 VPN 客户端。从一个 VPN 到另一个 VPN,我可以通过 SSH 连接 - 虽然这种流程不是必需的,但在某些时候可能会很好。问题是我无法从 192.168.1.0/24 上的主机通过 SSH 连接到 VPN 客户端。每个链(输入、转发和输出)的默认策略是丢弃。

我觉得这不是 OpenVPN 的问题,而是 netfilter(iptables)的问题。

现行相关规则:

INPUT -p udp --dport 1194 -j ACCEPT
FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
FORWARD -i br0 -o tun0 -j ACCEPT
FORWARD -i tun0 -o br0 -j ACCEPT
FORWARD -s 192.168.254.0/24 -j ACCEPT
OUTPUT -d 192.168.254.0/24 -j ACCEPT

上述规则均成功。我尝试了其他规则,这些规则包含各种源和目标接口以及 IP 地址,但无法找出缺失的内容。我最初认为最明显的是:

转发 -d 192.168.254.0/24 -j 接受

...但添加后却不起作用。甚至没有命中。

=== 编辑 1 ===
防火墙有以下路线:

192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
192.168.254.0   0.0.0.0         255.255.255.0   U     0      0        0 tun2

此外,还有以下规则(上面也列出)...

FORWARD -i br0 -o tun0 -j ACCEPT

...当 192.168.1.0/24 主机尝试访问 VPN 客户端时获得命中。

=== 编辑 2 ===
从 192.168.1.x(具体为 .171)我traceroute --icmp 192.168.254.2在防火墙的 tun0 接口上运行了一段时间的数据包捕获,我看到了请求但没有回复。目标 192.168.254.2 从 192.168.254.0/24 回复 traceroute。它允许所有 ICMP。此流量由广泛的防火墙规则允许,FORWARD -i br0 -o tun0 -j ACCEPT我看到它被相应地记录下来。

答案1

你的 FORWARD 表中是否有这个:

iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

答案2

要么是我误解了本地路由表的工作方式,要么是其他东西出了问题,但这就是我让它正常工作的方法。我更改了 VPN 客户端的本地子网,因为它与 VPN 服务器后面的子网相同,即 VPN 服务器上的接口 br0。

VPN 服务器的防火墙规则正确且 VPN 配置正确。

当连接到 VPN 时,VPN 客户端上的路由表会获得具有正确度量和接口的正确路由......具有获胜度量的 0.0.0.0 和 192.168.1.0/24 都指向 tun0 接口。

相关内容