CentOS 7 で OpenVPN を使用してネットワークを接続する

CentOS 7 で OpenVPN を使用してネットワークを接続する

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 側で何かが欠けているかのどちらかです。

何が足りないのか誰か教えてもらえますか?

関連情報