在Centos 7上配置OpenVPN以使用Firewalld而不是iptables


14

我需要使用在Centos 7上配置OpenVPN firewalld

我在Centos 6.5上使用了iptables,只需要向以下行添加以下内容/etc/sysconfig/iptables

-A POSTROUTING -s "10.0.0.0/24" -o "wlan0" -j MASQUERADE 
-A FORWARD -p tcp -s 10.0.0.0/24 -d 0.0.0.0/0 -j ACCEPT 
run the command: echo 1 > /proc/sys/net/ipv4/ip_forward 
open port 443.

Answers:


31

使用firewall-cmd命令。

假设您要在默认区域将防火墙打开到OpenVPN,请执行以下命令。如果在非默认区域上运行它,则将其添加--zone=<zone>到命令中。

注意:如果您将默认public区域用于外部网络适配器,则回送接口也可能被伪装(取决于firewalld您所运行的版本),如果您正在运行可访问的服务(例如mySQL),则可能导致问题本地。

首先,列出当前打开的内容:

# firewall-cmd --list-services
http https ssh

接下来,添加openvpn服务:

# firewall-cmd --add-service openvpn
success

快速检查:

# firewall-cmd --list-services
http https openvpn ssh

以上将允许openvpn工作,您现在可以对其进行测试。但是,它不会持续重启。要使其永久存在,请添加以下--permanent选项:

# firewall-cmd --permanent --add-service openvpn`
success

请注意,最后一个命令直到下一次重新启动后才打开端口,因此您需要同时使用这两个命令。

最后,添加化妆舞会:

# firewall-cmd --add-masquerade
success

并在重新启动后使其永久不变:

# firewall-cmd --permanent --add-masquerade
success

确认它:

# firewall-cmd --query-masquerade
yes

请注意,如果传入的OpenVPN连接与面向Internet的连接位于不同的区域,则伪装应该位于后者上,并且您需要--zone=<zone>--add-masquerade命令中使用该选项。


您如何知道firewalld中openvpn服务的定义?例如,如何验证它是否允许通过TCP 443的openvpn?
Christopher

@ Christopher-Service文件位于中/lib/firewalld/services/。就您而言,它将openvpn.xml位于该目录中。用户定义的服务进入/etc/firewalld/services。请注意,openvpn的默认端口是UDP/1194
garethTheRed

1
谢谢。我遇到了问题,并认为可能是防火墙。我所做的唯一与上述说明不同的事情是使用“ https”代替“ openvpn”作为要添加的服务名称。事实证明,这个问题并没有防火墙。我只是傻瓜,忘了正确配置客户端以使用“ tun”而不是“ tap”。上面的说明非常有效。
Christopher

1
我注意到在整个区域添加假面舞会存在问题。当我在本地主机上运行其他服务时,这会尝试将我与回送接口的连接转换为NAT。我想将伪装限制在10.8.0.0/16。你知道怎么做吗?
Christopher

1
该错误可能是原因。基本上,如果您的默认区域是该public区域,则它会伪装回送接口。原来,我之前将默认区域设置为external,所以从未遇到过您遇到的问题。尝试将服务和适配器移至另一个区域,以查看是否有帮助。让我知道:-)
garethTheRed
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.