OpenVPN 클라이언트를 다른 OpenVPN 서버로 라우팅

OpenVPN 클라이언트를 다른 OpenVPN 서버로 라우팅

이런 시나리오가 있는데...

  1. 여러 OpenVPN 연결이 있는 서버(기본)(따라서 서버는 여러 OpenVPN 서버에 클라이언트로 연결됩니다.. 보조 서버라고 가정하겠습니다)
  2. 이 서버는 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

관련 정보