서버에서 클라이언트로 OpenVPN 라우팅

서버에서 클라이언트로 OpenVPN 라우팅

각각 공용 IP가 있는 두 개의 먼 장소가 있고 이 장소들의 LAN 네트워크를 마치 하나인 것처럼 만들고 싶습니다. 즉, A 장소에 있는 기계는 B 장소에 있는 기계와 통신할 수 있고 A 장소에 있는 기계와 B 장소에 있는 기계와 통신할 수 있습니다.

In Place A(10.0.2.1)에는 OpenVPN 서버가 포함된 ASUS AC 1200g+ 및 Raspberry pi(10.0.2.60)가 있습니다. 새 클라이언트는 인터페이스 tun0( 10.8.0.1 )에 유지됩니다. 현재 클라이언트(장소 B)는 장소 A의 LAN과 통신할 수 있으며 대상이 10.0.1.0/24인 트래픽만 서버 측으로 리디렉션됩니다.

이제 장소 A(서버)의 컴퓨터가 장소 B의 LAN과 통신할 수 있기를 바랍니다. 10.0.1.0/24의 모든 대상 요청이 Raspberry Pi VPN 서버로 리디렉션되지만 서버는 해당 트래픽에 대해 무엇을 해야할지 모르는 라우터에 경로를 배치합니다.

Place B(10.0.1.1)에는 ASUS Merlin 펌웨어가 포함된 ASUS AC86U가 있고 "인바운드 방화벽" 활성화 옵션을 사용하여 OpenVPN 클라이언트를 활성화합니다.

네트워크 스키마

답변1

라즈베리 파이가 클라이언트인 비슷한 설정이 있지만 그다지 중요하지 않습니다. 면책조항: 설정하기가 가장 쉬운 것은 아닙니다.

/etc/iptables/iptables.rules파일을 사용하여 OpenVPN 연결(일반적 tun0으로 tun+모든 것을 포함)에서 로컬 네트워크로 NAT 트래픽을 보내고 있습니다.

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth+ -o tun+ -j ACCEPT
-A FORWARD -i tun+ -o eth+ -j ACCEPT
COMMIT

OpenVPN 구성에는 소위 말하는 것이 필요합니다.클라이언트-클라이언트 구성. OpenVPN-config 서버의 다음 두 줄은 이 기능을 활성화합니다.

# use ccd-folder (per host configs)
client-to-client
# routing to office lan:
client-config-dir ccd

구성이 있는 -path client-config-dir아래에 수동으로 생성해야 합니다 . /etc/openvpn/...해당 폴더 내에서 호스트별 텍스트 파일을 생성할 수 있습니다. 파일 이름 지정이 중요합니다. OpenVPN이 시스템 로그(예: 파일과 함께 journalctl -xef --unit openvpn-server@somehost또는 파일에서 openvpn-status.txt)에서 클라이언트를 호출하는 방법을 다시 확인하세요. 파일 내용은 간단합니다.

ifconfig-push 10.10.99.18 255.255.255.255
iroute 192.168.0.0 255.255.0.0

연결할 때마다 동일한 IP를 얻도록 구성하고( ) 이 파일 이름과 IP 주소를 사용하여 클라이언트에 대한 10.10.99.18트래픽을 내부적으로 라우팅하도록 VPN 서버를 구성합니다 . 192.168.0.0/16따라서 아직 유효한 네트워크 연결이 없는 이유를 이해할 수 있습니다. 즉, VPN 서버의 호스트 시스템이 VPN 터널을 사용하여 해당 네트워크에 대한 트래픽을 라우팅할 수 있다는 사실을 모르기 때문입니다( netstat -rn4). 따라서 VPN 서버를 다시 구성하고 다음을 추가해야 합니다.

route       192.168.0.0 255.255.0.0
push "route 192.168.0.0 255.255.0.0"

서버에 트래픽을 라우팅해야 한다고 알리고 192.168.0.0/16서버에 연결된 모든 클라이언트에도 경로에 대한 정보를 제공해야 합니다. 경로가 클라이언트에 푸시됩니다.


설정을 위해 위의 링크를 사용했지만 이 답변을 작성하는 동안 주제와 관련된 두 가지 흥미로운 링크를 발견했습니다.

행운을 빌어요 :)

관련 정보