![CentOS 7 で OpenVPN を使用してネットワークを接続する](https://rvso.com/image/112004/CentOS%207%20%E3%81%A7%20OpenVPN%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B.png)
OpenVPN を実行する CentOS 7 システムのペアを使用して、2 つのネットワークを接続しようとしています。
背後に 2 つのネットワークがある「サーバー」側と、1 つのネットワークがある「クライアント」側があります。基本的な 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
...そして、クライアント ゲートウェイは実際に、サーバーのネットワークのより深いところにあるデバイスに 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:
ここで、サーバー上で 2 つの内部ネットワークが相互に通信できるようにするには、直接 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 側で何かが欠けているかのどちらかです。
何が足りないのか誰か教えてもらえますか?