![OpenVPN 클라이언트를 다른 OpenVPN 서버로 라우팅](https://linux55.com/image/55290/OpenVPN%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EB%A5%BC%20%EB%8B%A4%EB%A5%B8%20OpenVPN%20%EC%84%9C%EB%B2%84%EB%A1%9C%20%EB%9D%BC%EC%9A%B0%ED%8C%85.png)
이런 시나리오가 있는데...
- 여러 OpenVPN 연결이 있는 서버(기본)(따라서 서버는 여러 OpenVPN 서버에 클라이언트로 연결됩니다.. 보조 서버라고 가정하겠습니다)
- 이 서버는 OpenVPN 서버도 실행합니다.
이제 나에게 필요한 것은 클라이언트가 사용자 이름/비밀번호를 사용하여 OpenVPN(기본) 서버에 연결하는 것입니다. 해당 사용자 이름을 기반으로 서버는 해당 클라이언트의 모든 트래픽을 지정된(보조) OpenVPN 서버로 라우팅합니다.
를 사용하여 이를 수행할 수 있는 방법이 있습니까 iptables
?
감사해요
답변1
나는 당신이 원한다고 가정합니다 :
one specific secondary VPN server to become the default gateway for a given client.
그렇다면 경로 푸시를 사용하여 이를 수행할 수 있습니다. OpenVPN 연결이 설정된 후 클라이언트에게 "새" 게이트웨이의 주소를 알려줄 수 있다는 것을 이미 알고 있습니다.
글쎄, 당신은 이것을 할 수 있습니다동적으로.
~에서수동:
--client-connect script 클라이언트 연결 시 스크립트를 실행합니다. 스크립트 통과일반 이름방금 환경 변수로 인증된 클라이언트의 IP 주소(아래 환경 변수 섹션 참조). 또한 스크립트는 아직 생성되지 않은 임시 파일의 경로 이름을 스크립트에서 사용할 $1(즉, 첫 번째 명령줄 인수)로 전달합니다.동적으로 생성된 프로필 지시문을 OpenVPN에 다시 전달.
스크립트가 클라이언트가 연결될 때 서버에 적용될 동적 구성 파일을 생성하려는 경우 이를 $1이라는 파일에 작성해야 합니다.
동적으로 생성된 구성 파일에 사용할 수 있는 옵션은 아래 --client-config-dir 옵션을 참조하세요.
알아채다스크립트의 반환 값이 중요합니다. 스크립트가 0이 아닌 오류 상태를 반환하면 클라이언트 연결이 끊어집니다.
따라서 사용자가 해야 할 일은 (클라이언트 일반 이름, 기본 게이트웨이) 항목 목록을 유지 관리하고 client-connect
클라이언트 이름을 확인하고 push "route-gateway a.b.c.d"
OpenVPN 서버와 거기에서 클라이언트로 보낼 적절한 콘텐츠를 준비하는 스크립트를 준비하는 것뿐입니다.
스크립트에 명령을 넣을 수도 있지만 ip
필요하지 않을 수도 있습니다.
예를 들어:
#!/bin/sh
# Connect script for OpenVPN. This is /usr/local/bin/openvpn-connect-script.sh
# and OpenVPN server requires the extra option
#
# --connect-client /usr/local/bin/openvpn-connect-script.sh
#
$script="$1"
# We could even fetch this from, say, a MySQL database.
# GATEWAY=$( echo "SELECT gateway FROM users_config WHERE user='$username';" \
# | mysql -N openvpn )
case "$username" in
"lserni")
GATEWAY=192.168.168.192
;;
"apiraino")
GATEWAY=192.168.170.133
;;
"*")
GATEWAY=192.168.172.1
;;
esac
cat <<-CONFIG > $script
# Extra options, user-dependant.
gateway $GATEWAY
CONFIG
exit 0