네트워크의 클라이언트가 OpenVPN을 통해 연결된 클라이언트와 통신할 수 있도록 허용합니다.

네트워크의 클라이언트가 OpenVPN을 통해 연결된 클라이언트와 통신할 수 있도록 허용합니다.

네트워크 토폴로지는 다음과 같습니다.

OpenVPN 서버:

Private IP (eth0): 10.0.4.23/16
Public IP (eth1): 77.20.30.40/24
Routes:
default via 77.20.30.1
10.0.0.0/16 (not routable, so no gateway)
10.8.0.0/16 via 10.0.0.65

동일한 개인 서브넷에서 10.0.13.0/24 네트워크 범위의 개인 주소로 OpenVPN을 통해 연결하는 클라이언트를 제공합니다. 따라서 클라이언트는 OpenVPN 서버 주소 10.0.13.1을 게이트웨이로 간주합니다.

클라이언트 시스템:

Public IP: 217.40.50.60

현재 클라이언트가 VPN 서버에 연결하면 개인 범위 내의 서브넷을 볼 수 없습니다. 그래서 OpenVPN 서버 tun0 IP(10.0.13.1)를 사용하여 이러한 네트워크에 경로를 추가했습니다.

ip r add 10.0.0.0/16 via 10.0.13.1
ip r add 10.8.0.0/16 via 10.0.13.1

이것은 작동하지 않습니다. 그래서 OpenVPN 서버에 POSTROUTING iptables 규칙을 추가했습니다.

iptables -A POSTROUTING -s 10.0.13.0/24 -o eth0 -j MASQUERADE

그때는 효과가 있었습니다. 그러나 문제는 예를 들어 해당 개인 서브넷의 서버에 연결할 때 10.0.4.20서버가 원래 IP 주소를 OpenVPN 개인 주소로 취급한다는 것 입니다 10.0.4.23.

현재 우리는 Microsoft VPN을 설정했으며 이를 사용할 때 모든 서버는 VPN이 할당된 클라이언트 IP 주소를 볼 수 있으므로 이를 수행할 수 있지만(어쩌면) 어디가 잘못되었는지 잘 모르겠습니다.

이것은 OpenVPN 서버 구성 파일이며, 독자의 편의를 위해 설명이 제거되었습니다.

port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.0.13.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.0.0.1"
push "dhcp-option DNS 10.0.0.2"
push "route 10.0.0.0 255.255.0.0"
push "route 10.8.0.0 255.255.0.0"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key 0
crl-verify crl.pem
ca ca.crt
cert server_oy94rAaIiMtrnvAB.crt
key server_oy94rAaIiMtrnvAB.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
status /var/log/openvpn/status.log
log /var/log/openvpn/openvpn.log
verb 3

plugin /opt/openvpn-ldap-auth/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
client-cert-not-required

server 10.0.13.0 255.255.255.0네트워크 로 설정하려고 시도했지만 server 10.0.13.0 255.255.0.0OpenVPN 서버는 해당 구성을 좋아하지 않으며 서브넷의 첫 번째 옥텟이 0.

간단하게 유지하려면: 10.0.0.0/16 네트워크의 일부 서버를 10.0.13.0/24의 VPN 클라이언트에 연결하려면 어떻게 해야 합니까? 아니면 OpenVPN 서버가 10.0.13.0/24 범위의 클라이언트 IP 주소를 할당하도록 하지만 실제로는 10.0.0.0/16에 속하게 하려면 어떻게 해야 할까요? 동일한 서버에 별도의 DHCP 서버를 설치해야 합니까?

답변1

귀하의 설명에서 누락된 구성이 보입니다. 귀하가 말하지 않은 내용입니다.다른서버가 VPN 클라이언트에 도달하는 방법.

이 구성이 없으면 해당 네트워크에 주소가 있는 모든 호스트는 10.0/16기본적으로 동일한 네트워크(서브넷 포함)에 있는 다른 주소가 10.0.13/24"온라인"이라고 가정합니다. 즉, 중간 라우터 없이 직접 연결할 수 있습니다.

테스트 예로 ip r add 10.0.13.0/24 via 10.0.4.23다음 중 하나를 시도해 보세요.다른10.0/16네트워크의 일부인 Linux 서버(OpenVPN 서버 아님): 그 후에는 특정 Linux 서버와 OpenVPN 클라이언트 간에 트래픽이 정기적으로 흘러야 합니다.

10.0/16물론 Linux, Windows, Mac, Cisco 또는 기타 호스트 등 개인 네트워크의 모든 호스트에도 동일하게 적용됩니다 . 실제로 개인 네트워크의 모든 호스트에 이 경로를 설정해야 합니다.

물론 호스트가 많은 경우 이는 권장되지 않을 수 있습니다. 네트워크 측면에서 더 나은 접근 방식은 OpenVPN 서버를 전체 개인 네트워크의 중앙 게이트웨이로 설정하는 것입니다. 실제로는 모든 호스트의 기본 게이트웨이가 될 수도 있습니다.

이것이 가능하지 않다고 가정하고 개인 네트워크(아마도 호스트?)에 이러한 "중앙 게이트웨이"가 이미 있는 경우 10.0.0.65위의 경로를 사용하여 해당 게이트웨이를 구성해 볼 수 있습니다. 다른 호스트(게이트웨이 참조) 일반적으로 순종 및 준수가 예상됩니다. 그러나 이 솔루션은 이러한 호스트가 "중앙 게이트웨이"에 의해 OpenVPN 서버 게이트웨이로 자주 다시 라우팅되기 때문에 일반적으로 최적이 아닙니다.

다른 대안으로는 OpenVPN 서버 역할을 하는 Linux 서버에 특수 구성을 설정하여반품OpenVPN 클라이언트 주소에 대한 "프록시 arp" 역할을 합니다. 가능하지만 복잡하고 고급입니다.

브리징 솔루션이것은 확실히 빠르고 쉬운 솔루션이지만 모든 브로드캐스트 트래픽(중형 LAN에서 자주 발생할 수 있음)이 모든 OpenVPN 클라이언트에 전파되어 OpenVPN 서버의 리소스를 묶는다는 것을 의미합니다.그리고귀하와 귀하의 클라이언트 사이의 인터넷 연결, 각 브로드캐스트 프레임에 연결된 클라이언트 수를 곱합니다.

답변2

나는 이 문제를 다음의 도움으로 해결했습니다.이더넷 브리지.

단계는 다음과 같습니다.

  • CentOS에서 OpenVPN 서버를 중지합니다.systemctl stop openvpn@server
  • CentOS 7에 bridge-utils 패키지 설치yum install bridge-utils
  • tap0 가상 이더넷 장치 만들기openvpn --mktun --dev tap0
  • 다리를 만들다brctl addbr br0
  • 새 브리지에 eth0 장치(개인 IP가 있는 장치)를 추가합니다.brctl addif br0 eth0
  • 브리지에 tap0 장치 추가brctl addif br0 tap0
  • Tap0 장치에 액세스하려면 무차별 모드를 활성화하세요.ifconfig tap0 0.0.0.0 promisc up
  • eth0 장치에 대해 무차별 모드 활성화ifconfig eth0 0.0.0.0 promisc up
  • 이전에 eth0으로 설정한 IP 주소를 br0에 할당합니다.ifconfig br0 10.0.4.23 netmask 255.255.0.0 broadcast 10.0.255.255
  • 새 인터페이스가 트래픽을 허용할 수 있도록 iptables 규칙을 추가하세요.
    iptables -A INPUT -i tap0 -j ACCEPT
    iptables -A INPUT -i br0 -j ACCEPT
    iptables -A FORWARD -i br0 -j ACCEPT
  • VPN 서버 구성 파일을 엽니다. 예를 들어 주석을 달고 바로 /etc/openvpn/server/server.conf아래 또는 위에 dev tun콘텐츠를 추가합니다 .dev tap0
  • 다음과 같이 server원래 eth0에 있었고 지금은 br0에 있던 IP 주소를 추가하고 VPN이 클라이언트에 할당할 DHCP 주소 범위도 추가합니다.
bridge 10.0.4.23 255.255.0.0 10.0.13.2 10.0.13.254

이를 통해 서버는 10.0.13.2 - 10.0.13.254 사이의 주소를 클라이언트에 임대할 수 있습니다.

  • 이제 openvpn 서버를 시작하고 즐기십시오 :) systemctl start openvpn@servers.

관련 정보