CentOS 7에서 OpenVPN을 사용하여 네트워크를 함께 연결하세요

CentOS 7에서 OpenVPN을 사용하여 네트워크를 함께 연결하세요

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

...분명히 라우팅이 어떻게 작동해야 하는지 이해하지 못하거나 방화벽 측에 뭔가가 빠져 있습니다.

내가 무엇을 놓치고 있는지 말해 줄 수 있는 사람이 있나요?

관련 정보