VPN 연결에서 새 이름 서버를 자동으로 얻는 방법

VPN 연결에서 새 이름 서버를 자동으로 얻는 방법

우분투 제니얼 16.04를 실행 중입니다.

openvpn을 사용하여 가상 사설 클라우드에 연결합니다. 클라우드에는 자체 DNS 서버가 있습니다(로컬 경로(집 또는 사무실)도 마찬가지).

VPN에 연결하면 네트워크의 모든 IP를 사용할 수 있지만 호스트 이름으로는 어떤 IP에도 액세스할 수 없습니다. 이유는 간단합니다. resolv.conf 파일에 여전히 내 로컬 사무실 네임서버가 표시되기 때문입니다. 올바른 네임서버를 얻기 위해 resolv.conf를 수동으로 재정의하면 모든 것이 정상입니다.

그렇다면 VPN에 연결될 때 resolv.conf를 자동으로 재구성하려면 어떻게 해야 할까요?

시스템 이벤트에 연결하여 스크립트를 실행할 수 있나요?

답변1

OpenVPN 패키지는 다음 /etc/openvpn/update-resolv-conf과 같이 구성해야 합니다.

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

dhcp-option DNS그러면 OpenVPN 피어/서버가 전달한 옵션에서 DNS 서버 주소를 가져와 그에 resolvconf따라 구성합니다. 또한 잘 처리 합니다 dhcp-option DOMAIN.

하지만 완벽하지는 않습니다. 이렇게 하면 기존 이름 서버 목록을 덮어쓰지 않고 해당 이름 서버를 기존 이름 서버 목록에 추가하게 되기 때문입니다. 을 사용하는 경우 미리 DNS 구성을 추가하는 대신 DNS 구성을 재정의하는 데 사용할 openresolv수 있습니다 .-x


를 사용하는 경우에는 which Hooks into를 대신 systemd-resolved사용할 수 있습니다 ./etc/openvpn/update-systemd-resolvedsystemd-revolvedresolvconf

script-security 2 
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre

데비안에서는 스크립트가 openvpn-systemd-resolved.

답변2

제가 생각해낸 해결책은 다음과 같습니다. 터널이 실행 중일 때 스크립트를 실행할 수 있는 스위치가 있습니다. 나는 해당 스위치를 사용하여 기본적으로 resolv.conf 파일을 내가 알고 있는 올바른 파일로 덮어씁니다. 나는 이것이 완전한 해킹이라는 것을 알고 있습니다.

sudo openvpn --up reset-dns.sh --client client.ovpn

스크립트(DNS 재설정):

#!/bin/bash
cp ~/resolv.conf /etc/resolv.conf

또한 "맙소사! 당신은 그 터널을 루트로 실행하고 있습니다!"라고 말하는 분들은 제가 DNS를 해킹하기 전에도 다른 방법으로는 작동하지 않습니다.

나는 확실히 더 나은 방법을 열려고 있습니다. Ubuntu의 네트워크 관리자가 전혀 작동하지 않습니다. 나는 이것을 위해 우분투에 대한 티켓을 여러 번 잘라 냈습니다.

관련 정보