우분투 제니얼 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-resolved
systemd-revolved
resolvconf
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의 네트워크 관리자가 전혀 작동하지 않습니다. 나는 이것을 위해 우분투에 대한 티켓을 여러 번 잘라 냈습니다.