Я всегда хотел получить доступ к частным серверам (доступ только через VPN или SSH-туннели) через домены, не проходя через хлопочие файлы локально модификации хостов в стороне клиента (ME и моих коллег) или файлы конфигурации SSH, поэтому вот моя попытка решить эту проблему.
Я использовал t3a.nano
AWS EC2 экземпляра, чтобы продемонстрировать идею с Ubuntu 20.04 на нем, с помощью Openvpn.
Как мой VPN-сервер и dnsmasq
как DNS-сервер.
Я использовал dnsmasq
вместо чего-то вроде Bind
Потому что намного проще настроить и поддерживать.
Openvpn.
Это было сделано только для демонстрационной цели, поэтому быстро настроить сервер OpenVPN без боли Я использовал Angristan/openvpn-install Сценарий, чтобы сделать это.
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh CLIENT=PORT_CHOICE=2 PORT=443 PROTOCOL_CHOICE=2 AUTO_INSTALL=y ./openvpn-install.sh
Это создаст профиль OpenVPP с именем, который вы выбрали в своем домашнем каталоге.
SystemD-решений
Для того, чтобы DNS-сервер, мы будем использовать, мы должны отключить SystemD-решений
от прослушивания порта 53:
# /etc/systemd/resolved.conf [Resolve] DNSStubListener=no
dnsmasq.
apt install dnsmasq
Установите Localhost адреса как единственные именные серверы в /etc/resolv.conf
Чтобы маршрутить все запросы DNS на наш DNS-сервер
# /etc/resolv.conf nameserver ::1 nameserver 127.0.0.1 options trust-ad
Теперь для конфигурации DNSMASQ:
# /etc/dnsmasq.conf no-resolv local=/lan/ listen-address=::1,127.0.0.1,10.0.1.136 expand-hosts domain=lan cache-size=1000 server=8.8.8.8 server=8.8.4.4
Конфигурация DNSMASQ объяснила:
No-Resolv: не читайте /etc/resolv.conf.
Слушай-адрес: адреса, которые мы хотим прослушать связь. 10.0.1.136
Личный IP экземпляра EC2 DNSMASQ установлен в.
Домен и локальные: наш пользовательский домен вспомогательный
Развертывающие хосты: читать имена хостов из /etc/hosts
и решить это как hostname.lan.
Кэш-размер: кэш 1000 DNS-запрос. По умолчанию 150.
Сервер: Если DNSMAMAQ не может разрешить запрос Вызов внешнего сервера
Чтобы добавить новый хост или домен в сеть, просто добавьте его в файл хостов:
# /etc/hosts ... 10.0.1.136 messi 10.0.1.136 salah ...
Проверьте нашу настройку
Теперь, чтобы проверить, работает ли наша конфигурация копать
С моей клиентской машины, который подключен к моей частной сети через VPN, с доменами Messi.lan
и Salah.lan.
Messi.lan.
# dig messi.lan ; <<>> DiG 9.16.8-Ubuntu <<>> messi.lan ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56241 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;messi.lan. IN A ;; ANSWER SECTION: messi.lan. 0 IN A 10.0.1.136 ;; Query time: 448 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; MSG SIZE rcvd: 54
Salah.lan.
# dig salah.lan ; <<>> DiG 9.16.8-Ubuntu <<>> salah.lan ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43569 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;salah.lan. IN A ;; ANSWER SECTION: salah.lan. 0 IN A 10.0.1.136 ;; Query time: 384 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; MSG SIZE rcvd: 54
Оба вернули наш IP-адрес сервера в разделе «Ответ». Это работает отлично.
Вы даже можете использовать любой веб-сервер (например, nginx), чтобы проверить настройку, указав разные имена серверов и запросите его с нашего клиентского компьютера.
Примечания
- Вам может потребоваться настроить свой клиент OpenVPN, чтобы использовать адрес сервера DNS.
Сделать
- Настройте OpenVPN для маршрута только внутреннего трафика через VPN
- Кэшируйте DNS-запросы локально, чтобы улучшить производительность.
Оригинал: «https://dev.to/akhal3d96/maintain-local-domains-for-your-private-networks-47df»