我在跑CentOS 7 上的 openvpn和防火墙。我已经在公共(默认)区域启用了伪装,并且效果很好。然而,我偶尔需要在 localhost/127.0.0.1 上运行服务,而伪装却把它弄乱了。服务正确绑定到 127.0.0.1,但尝试连接到它的客户端代码似乎将 127.0.0.1 的目标 IP 地址映射到 eth0 的 IP 地址,其中服务器未侦听(已配置为 127.0.0)仅.0.1)。
如何将伪装限制为仅特定子网,以便 openvpn 仍然有效,但我也可以在本地主机上访问本地服务而不会受到伪装干扰?
另一种表达我的问题的方式是:如何防止环回地址的伪装?
我有一些想法,但不知道如何做(或者在不破坏其他东西的情况下做):
- 将 openvpn 的伪装限制为仅 10.8.0.0/16
- 通过将 eth0 的 IP 地址移动到另一个区域来限制伪装
- 通过将环回接口移至受信任区域并将 eth0 的 IP 地址添加为受信任区域中的源来容忍伪装
答案1
我找到了一个解决方案:
external
interfaces: eth0
masquerade: yes
internal
interfaces: tun0
masquerade: no
public (default)
interfaces: # not used
masquerade: no
trusted
interfaces: lo
masquerade: no
为了实现这一点,我必须明确声明它lo
在该trusted
区域中,tun0
在该internal
区域中,并且eth0
在该区域中external
。为此,我使用了(例如):
firewall-cmd --permanent --zone=external --add-interface=eth0
firewall-cmd --permanent --zone=internal --add-interface=tun0
firewall-cmd --permanent --zone=trusted --add-interface=lo
firewall-cmd --reload
对于eth0
,还需要添加ZONE="external"
to/etc/sysconfig/network-scripts/ifcfg-eth0
才能使其在重新启动后继续工作。对于其他接口来说这不是必需的。
实际的服务/端口在trusted
和internal
区域中打开,我保留其默认值。我确保默认区域 ( public
) 上有 ssh(默认)以应对紧急情况(例如更新重命名接口eth0
),并添加了我想要向该区域公开的服务external
。
masquerade
默认情况下,该区域中已开启external
,而其他区域则已关闭。
此设置适用于防火墙d-0.3.9-14.el7.noarch
我不确定为什么需要将它们放在单独的区域中,以排除环回接口的伪装(打开伪装会设置规则:-A POST_external_allow ! -i lo -j MASQUERADE
,这对我来说已经足够了,但我不是专家)。然而,我发现这个错误这可能是相关的,并且该问题可能会在未来的版本中得到解决。