Я пытался найти решение этой проблемы, но пока не нашел ответа, поэтому я надеюсь, что вы, ребята, сможете мне помочь.
У меня есть сервер под управлением Ubuntu 10.04, у которого есть статический IP-адрес и URL-адрес, указывающий на него, например server.foo.com
На этом сервере у меня есть сервер OpenVPN, работающий со следующей конфигурацией:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option DOMAIN foo.com"
keepalive 10 120
tls-auth ta.key 0
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 1
plugin /usr/lib/openvpn/openvpn-auth-pam.so vpnlogin
Клиенты настраиваются следующим образом:
client
dev tun
proto udp
remote server.foo.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass
ca ca.crt
cert server.crt
key server.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 1
auth-nocache
Как вы можете видеть в конфигурации сервера, у меня также работает DNS-сервер. Этот сервер является сервером dnsmasq со следующей конфигурацией в /etc/dnsmasq.conf:
interface=tun0
listen-address=127.0.0.1
dhcp-authoritative
cache-size=0
no-negcache
В /etc/dnsmasq.d/ есть файлы, которые направляют URL-адреса обратно на этот сервер, которые должны быть отправлены клиентам VPN. Самый важный из них содержит:
address=/server.foo.com/10.8.0.1
Обратите внимание, что этот URL-адрес точно такой же, как мой общедоступный URL-адрес. Я также создал другие записи DNS для тестирования, например address = / server2.foo.com / 10.8.0.1
Теперь на этом сервере запущена служба HTTP, и я хочу разрешить доступ к ней только пользователям из моей локальной сети, а также клиентам OpenVPN. Я заблокировал весь входящий трафик в ufw, за исключением:
To Action From
1194 ALLOW Anywhere
53 ALLOW 10.8.0.0/24
80/tcp ALLOW 10.8.0.0/24
80/tcp ALLOW 192.168.0.0/24
Теперь, чтобы наконец подойти к моей проблеме. Когда подключается клиент OpenVPN, записи DNS из dnsmasq должны быть отправлены клиентам, что они и делают.
Однако запись server.foo.com явно игнорируется, возможно, в пользу общедоступного DNS. Когда я набираю server.foo.com в Firefox или Chrome, находясь за пределами моей локальной сети, но подключенный к VPN, у меня возникает тайм-аут. 10.8.0.1 и другие записи, такие как server2.foo.com, работают.
Трассировка в 32-разрядной версии Windows 7 показывает, что, например, server2.foo.com отправляется одним прыжком на 10.8.0.1, но server.foo.com проходит через общедоступный DNS-сервер и пытается подключиться к моему общедоступному статическому IP-адресу, который заблокирован, что дает тайм-аут.
Я до сих пор пробовал несколько вещей, но это все еще не работает:
Извините за такой длинный пост, возможно, довольно короткий вопрос. И я надеюсь, что кто-нибудь сможет мне помочь.
С уважением, Майк.
Я думаю, ваша установка сломается или не сработает:
Ваша конфигурация клиента OpenVPN использует публичный адрес server.foo.com для подключения к серверу OpenVPN. Очевидно, этот адрес будет найден перед установкой VPN-туннеля.
Вы пытаетесь отправить DNS-запись для server.foo.com с IP-адресом OpenVPN после того, как туннель установлен с конфигурацией dnsmasq. Либо клиент OpenVPN игнорирует его (поскольку он уже знает о server.foo.com, поскольку ему пришлось искать его, чтобы установить туннель), либо он будет уважать его, а затем отбросит туннель, потому что конфигурация клиента OpenVPN будет указывать на сейчас несуществующий IP-адрес. Последнее, скорее всего, может произойти во время сеанса OpenVPN, в зависимости от TTL DNS-сервера для общедоступного IP-адреса server.foo.com.
TL; DR: вы в основном пытаетесь сообщить своему клиенту противоречивую информацию о server.foo.com. Я не могу придумать хороший способ сделать то, что ты задумал. Альтернативой может быть установка второй записи DNS A-записи vpnserver.foo.com, которая указывает на тот же IP-адрес, что и server.foo.com, а затем изменить конфигурацию OpenVPN, чтобы использовать ее.
Хотя и очень поздно, но одним из возможных обходных путей может быть перенаправление всего клиентского трафика через туннель (если это позволяет клиентский сценарий). Вам необходимо добавить следующую директиву в файл конфигурации вашего сервера. например нажмите "redirect-gateway def1" Подробнее см. Вот Таким образом, клиент не будет проверять общедоступный DNS.