![Объедините сети вместе с помощью OpenVPN на CentOS 7](https://rvso.com/image/112004/%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D0%B5%20%D1%81%D0%B5%D1%82%D0%B8%20%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B5%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20OpenVPN%20%D0%BD%D0%B0%20CentOS%207.png)
Я пытаюсь соединить две сети, используя пару систем CentOS 7, на которых запущен OpenVPN.
У меня есть сторона "сервера", которая имеет две сети позади себя, и сторона "клиента", которая имеет одну сеть. Базовое соединение openvpn установлено, но я думаю, что у меня что-то не так с маршрутизацией или конфигурацией firewalld.
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
...и клиентский шлюз фактически может пинговать устройства, расположенные глубже в сети сервера:
[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
...так что я явно либо не понимаю, как должна работать маршрутизация, либо что-то упускаю на стороне firewalld.
Может ли кто-нибудь сказать мне, что я упускаю?