我正在尝试使用一对运行 OpenVPN 的 CentOS 7 系统将两个网络连接在一起。
我有一个“服务器”端,后面有两个网络,“客户端”端有一个网络。基本的 openvpn 连接已建立,但我认为路由或防火墙配置有问题。
OpenVPN 是 10.8.0.0/24 上的一个池。服务器后面有网络10.254.1.0/24和10.255.1.0/24;客户端后面有10.255.0.1。
服务器将这些路由选项推送到 server.conf 中:
# Push any routes the client needs to get in
# to the local network.
push "route 10.254.1.0 255.255.255.0"
push "route 10.255.1.0 255.255.255.0"
这些在客户端的路由表中正确显示:
10.8.0.1 via 10.8.0.5 dev tun0
10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6
10.254.1.0/24 via 10.8.0.5 dev tun0
10.255.0.0/24 dev enp6s4f0 proto kernel scope link src 10.255.0.1 metric 100
10.255.1.0/24 via 10.8.0.5 dev tun0
...并且在服务器端我手动设置了适当的路线:
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
10.255.0.0/24 via 10.8.0.2 dev tun0
...并且客户端网关实际上可以对服务器网络更深处的设备执行 ping 操作:
[root@sentry openvpn]# ping -c 1 10.254.1.10
PING 10.254.1.10 (10.254.1.10) 56(84) bytes of data.
64 bytes from 10.254.1.10: icmp_seq=1 ttl=63 time=300 ms
...但我无法 ssh 到它。
# ssh [email protected]
ssh: connect to host 10.254.1.10 port 22: No route to host
...所以,我认为这可能是防火墙问题。
在两侧,我都将 tun 接口添加到我的内部区域。
在客户端:
# firewall-cmd --info-zone="internal"
internal (active)
target: default
icmp-block-inversion: no
interfaces: enp6s4f0 tun0
sources:
services: dhcp dhcpv6-client dns http mdns mosh samba-client snmp ssh syslog
ports: 8000/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
...和服务器:
# firewall-cmd --info-zone="internal"
internal (active)
target: default
icmp-block-inversion: no
interfaces: ens161 ens256 tun0
sources:
services: dhcpv6-client mdns samba-client snmp ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
现在,在服务器上为了让两个内部网络相互通信,我必须添加直接 iptables 规则:
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens256 -o ens161 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens161 -o ens256 -j ACCEPT
...所以我对 openvpn 网络做了同样的事情:
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens256 -o tun0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -o ens256 -i tun0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens161 -o tun0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -o ens161 -i tun0 -j ACCEPT
...以及在客户端:
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp6s4f0 -o tun0 -j ACCEPT
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -o enp6s4f0 -i tun0 -j ACCEPT
...很明显,我要么不明白路由应该如何工作,要么我在防火墙方面遗漏了一些东西。
谁能告诉我我错过了什么?