因此有一个具有多个客户端的 OpenVPN 服务器,我成功地将其划分为多个子网。
- 10.0.30.0/26 适用于通用客户端,仅允许与 OpenVPN 服务器本身通信。
- 10.0.30.64/26 用于允许访问本地网络的特权客户端。
OpenVPN 服务器只有一个物理接口 [eno1],它连接到本地网络 10.0.10.0/24(然后连接到路由器以访问互联网)。现在,OpenVPN 端的一切似乎都设置正确,因为客户端被分配了来自正确池的地址,并且正确的路由被推送到特权客户端。
但困难的部分在于转发 IP 流量......
ip_forwarding 已启用:
# cat /proc/sys/net/ipv4/ip_forward
1
在firewalld中接口被划分为不同的区域:
# firewall-cmd --get-active-zones
home
interfaces: eno1
trusted
interfaces: tun0
我尝试了很多 iptables 规则,但就是无法让它工作。唯一让我完全不熟悉的是防火墙...
当我部署此规则时,客户端可以访问本地网络,但需要通过 NAT。我需要本地网络上的服务能够看到来自 10.0.30.64/26 子网的实际客户端 IP。
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eno1 -j MASQUERADE
当然,这种简单的 NAT 尝试不会仅针对特权源地址进行过滤,但在我看来,它表明 OpenVPN 配置本身是好的,而“仅”缺少转发部分……
所以问题是:如何配置从源 IP 10.0.30.64/26 的接口 tun0 到目标 IP 10.0.10.0/24 的接口 eno1 的 IP 转发?
答案1
转发已配置 – 如果没有配置,您的“伪装”规则将不会执行任何操作。(防火墙可以仅有的改变那些无论如何都要通过它的数据包,但实际上它不能强制转发这些数据包(如果本来不会转发的话)。
这里最有可能的问题是你的 LAN 主机不知道将回复发送到哪里后退到客户端。它们没有 10.0.30.x 子网的路由;它们尝试通过默认网关发送回复;所述网关也没有适当的路由;数据包最终“流出”并最终被您的 ISP 丢弃。
(启用 NAT 后,LAN 主机认为它们正在被网络中的另一台主机连接。当地的10.0.10.0/24 子网,它们做有路线并且可以回复。
为了解决这个问题,请10.0.30.64/26 via 10.0.10.???
在本地 LAN 网关和/或每个单独的主机上添加一条路由(以 OpenVPN 服务器的 IP 地址作为下一跳)。后者可以使用 DHCP 选项完成。