Debian에서 실행 중인 OpenVPN 서버가 있으며 서버 구성 파일에 DNS를 푸시합니다.

푸시 "dhcp 옵션 DNS 8.8.8.8"

사용자가 클라이언트 측에서 해당 DNS 서버를 변경할 수 있도록 하는 옵션이 있습니까?

여기 캐치가 있습니다. 그렇지 않으면 많은 OpenVPN 클라이언트가 시스템의 네트워크 설정에서 수동으로 DNS 서버를 설정할 때까지 웹 페이지를 열 수 없기 때문에 openvpn 서버는 DNS를 푸시해야 합니다.

내 목표는 기술적으로 숙련되지 않은 사용자에게 기본 DNS 서버를 자동으로 적용하는 동시에 숙련된 컴퓨터 사용자가 자신의 DNS 서버를 설정할 수 있도록 하는 것입니다.

openvpn 서버에서 'push "dhcp-option DNS 8.8.8.8"' 옵션이 활성화되어 있는 동안 PC에서 DNS 설정을 변경하는 것만으로는 아무 효과가 없습니다. 서버에서 푸시한 DNS는 로컬 DNS 설정에 관계없이 유지됩니다.

어떤 아이디어?

OpenVPN 서버 구성:

# cat /etc/openvpn/openvpn.conf
server 10.186.35.0 255.255.255.0
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt
#push "route 0.0.0.0 0.0.0.0"
#push "redirect-gateway"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
comp-lzo
user nobody
group users
persist-key
persist-tun
status openvpn-status.log
verb 3
script-security 3
auth-user-pass-verify /etc/openvpn/auth-chap via-env
client-cert-not-required
duplicate-cn
management 127.0.0.1 5119
script-security 3 system
username-as-common-name
client-connect /etc/openvpn/scripts/clientconnect.sh
client-disconnect /etc/openvpn/scripts/clientdisconnect.sh
log-append /var/log/openvpn.log
log /var/log/openvpn.log

업데이트: 클라이언트 운영 체제는 Windows 및 Mac입니다.

answer

2017년(OpenVPN 2.4)부터 이것이 가능합니다. 클라이언트 구성 파일에 다음 줄을 추가합니다.

pull-filter ignore "dhcp-option DNS"

인용된 텍스트로 시작하는 모든 푸시된 구성 라인을 무시합니다.

옵션은 하향식으로 일치하므로 첫 번째 일치가 사용됩니다. 이를 사용하여 필요에 따라 일부 경로를 허용하고 다른 경로를 거부할 수 있습니다.

세 액션 키워드는 accept, ignore,와 reject. 에 대한 사용 사례를 발견하지 못했습니다 reject.

공식 OpenVPN 문서에서 다음을 찾을 수 있습니다.

[...]
--route-nopull
  When used with --client or --pull, accept options pushed by server EXCEPT for routes and 
  dhcp options like DNS servers.
  When used on the client, this option effectively bars the server from adding routes to the 
  client's routing table, however note that this option still allows the server to set the 
  TCP/IP properties of the client's TUN/TAP interface.
[...]

불행히도 귀하가 요청한 것 외에도 구성에서 제공 하는 리디렉션 게이트웨이를 비활성화하는 부작용있으며 귀하의 경우 문제를 나타낼 수 있습니다.

내가 제안하는 것은 완전히 다른 접근 방식입니다.

귀하가 명시적으로 언급했듯이 " 내 목표는 기술적으로 숙련되지 않은 사용자에게 기본 DNS 서버를 자동으로 적용하는 동시에 숙련된 컴퓨터 사용자가 자신의 DNS 서버를 설정할 수 있도록 하는 것 입니다. " 제공하려는 사용자를 정확히 알고 있는 것 같습니다 . DNS 구성 및 이러한 구성을 제공하지 않으려는 사용자.

따라서 기본 OpenVpn 구성 파일에서 구성을 직접 푸시하는 대신(...따라서 모든 사용자 에게 이러한 구성을 제공함 ) 사용자별 구성을 구현할 수 있습니다 . 다음을 사용하여 이 작업을 수행할 수 있습니다.

--client-config-dir dir
  Specify a directory dir for custom client config files. After a connecting client 
  has been authenticated, OpenVPN will look in this directory for a file having the 
  same name as the client's X509 common name. If a matching file exists, it will be
  opened and parsed for client-specific configuration options. If no matching file is
  found, OpenVPN will instead try to open and parse a default file called "DEFAULT", 
  which may be provided but is not required. Note that the configuration files must 
  be readable by the OpenVPN process after it has dropped it's root privileges.
  This file can specify a fixed IP address for a given client using --ifconfig-push, as 
  well as fixed subnets owned by the client using --iroute.
  One of the useful properties of this option is that it allows client configuration 
  files to be conveniently created, edited, or removed while the server is live, without 
  needing to restart the server.
  The following options are legal in a client-specific context: --push, --push-reset, 
  --iroute, --ifconfig-push, and --config.

따라서 기본 구성의 경우 다음을 제거 해야 합니다 .

  [**** to be removed from the main config***]
  push "dhcp-option DNS 8.8.8.8"
  push "dhcp-option DNS 8.8.4.4"

추가 받는 참조 / 등은 / OpenVPN을 / USERCONF (예를 들어 당신이 원하는대로 선택하시기 바랍니다.) 디렉토리 :

 [**** to be ADDED to the main config***]
 client-config-dir /etc/openvpn/userconf

그런 다음 이러한 userconf 디렉토리에서 위에서 삭제된 두 행을 포함하여 이러한 DNS를 제공하려는 각 사용자에 대해 하나의 파일을 만듭니다.

분명히 위의 두 행으로 사용자 정의를 제한하지 않고 모든 사용자에 대해 openvpn 구성을 자유롭게 미세 조정할 수 있습니다.

마지막으로 ccd-exclusive 매개변수 에도 관심이 있을 수 있습니다 .

내 문제는 정확히 같지는 않았지만 이 질문이 검색 결과에 나타날 정도로 증상이 비슷했기 때문에 같은 이유로 다른 사람이 여기에 올 경우를 대비하여:

Mac OS용 OpenVPN GUI인 Tunnelblick을 사용 하고 있습니다. 내 OpenVPN 서버는 DHCP 또는 DNS 옵션을 푸시하도록 설정되지 않았지만 클라이언트는 내가 사용하기를 원했던 VPN이 아닌 로컬 DNS 서버 대신 VPN을 통해 DNS 서버를 계속 사용하고 있었습니다.

이 솔루션은 Tunnelblick의 구성 → 설정 탭으로 이동하고 변화하는 것이었다 설정 DNS를 / WINS세트 네임 서버를하지 마십시오 .

@aldaviva 덕분에 제 macOS 10.11에서 작동합니다.

내 스크린샷을 첨부합니다.

여기에 이미지 설명 입력