Я установил VPN-соединение со своего Macbook, и, похоже, он успешно подключается.
Однако я не могу получить доступ к своему рабочему компьютеру, потому что имя хоста не разрешается:
$ ping myusername
ping: cannot resolve myusername: Unknown host
Попробовав все, что мог, я обнаружил, что эта команда делает мне доступными как сеть VPN, так и Интернет:
sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0
DNS-серверы компании доступны по их IP-адресам. Как мне настроить сеть использовать их для всего, что начинается с 192.168?
Я нашел временный обходной путь, который позволяет мне получить доступ к сети через VPN, изменив два параметра:
Выполнения этих двух шагов достаточно, чтобы мой рабочий компьютер стал доступен для проверки связи:
$ nslookup myusername
Server: 192.168.10.16
Address: 192.168.10.16#53
Name: myusername.universe.mycompany
Address: 192.168.11.56
$ ping myusername
PING myusername.universe.mycompany (192.168.11.56): 56 data bytes
64 bytes from 192.168.11.56: icmp_seq=0 ttl=126 time=126.164 ms
Однако, поскольку я туннелировал весь трафик для прохождения через VPN, я больше не могу получить доступ к Интернету:
$ ping google.com
PING google.com (74.125.232.48): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Как мне правильно настроить сеть, чтобы она понимала, когда использовать VPN, а когда использовать обычное соединение? Мне это нужно для правильного разрешения имен серверов Windows.
Если мне нужно опубликовать какой-либо вывод команды консоли, я готов сделать это, если вы дадите мне знать, какой именно.
Любая помощь приветствуется, так как сейчас для меня это своего рода ограничитель шоу.
Спасибо!
Похоже, возникла проблема с неправильной настройкой сетевой маски OSX. Это был мой опыт использования PPTP VPN как в Snow Leopard, так и в Mountain Lion, и он поддерживается этой веткой. Вот.
Я нашел решение Вот, который включает установку правила маршрутизации для трафика ppp0.
В принципе:
$ sudo <your_text_editor_of_choice> /etc/ppp/ip-up
#!/bin/sh
/sbin/route add -net 192.168 -interface ppp0
$ sudo chmod 755 /etc/ppp/ip-up
Это будет устанавливать правило маршрутизации каждый раз, когда вы подключаетесь к VPN.
Вы можете посмотреть на справочная страница преобразователя
Процитируем одно решение:
Конфигурация для конкретного клиента может быть прочитана из файла, имеющего формат, описанный на этой странице руководства. В настоящее время они находятся в системе в файле /etc/resolv.conf и в файлах в каталоге / etc / resolver. Однако конфигурации клиента не ограничиваются хранилищем файлов. Реализация стратегии мультиклиентского поиска DNS может также определять местонахождение клиентских конфигураций в других источниках данных, таких как база данных конфигурации системы. Пользователи системы DNS не должны делать никаких предположений об источнике данных конфигурации.
AFAIK вам нужно поместить файл с именем example.com
в /etc/resolver
с IP-адресами серверов имен для этого домена, если вам нужны специальные серверы имен для example.com
- Может быть, они используют resolv.conf
синтаксис, не помню. Но вы должны это понять :)
РЕДАКТИРОВАТЬ: Что касается автоматизации процесса, я почти уверен, что это выполнимо с AppleScript или Automator. Но я никогда не задумываюсь об этом, поэтому второй вопрос по этой теме может помочь.
Разрешение DNS в Mac OSX забавно. Вот быстрое решение.
Поместите следующий код в имя файла reset_dns
.
#!/bin/bash
function get_pri_srvc_id ()
{
cat <<EOF | scutil | \
grep 'PrimaryService' | \
awk -F': ' '{print $2}'
show State:/Network/Global/IPv4
EOF
}
function get_srvc_name ()
{
cat <<EOF | scutil | \
grep 'UserDefinedName' | \
awk -F': ' '{print $2}'
show Setup:/Network/Service/$1
EOF
}
function get_srvc_ids ()
{
cat <<EOF | scutil | \
sed -nEe '
/ServiceOrder/ {
:ids
n
/[0-9]+ :/ {
s/ *[0-9]+ : ([0-9A-Z-]+) */\1/p
b ids
}
}'
show Setup:/Network/Global/IPv4
EOF
}
function get_srvc_id_by_name ()
{
local srvc_ids=$(get_srvc_ids)
for srvc_id in $srvc_ids
do
local srvc_name=$(get_srvc_name "$srvc_id")
if [[ "$srvc_name" == "$1" ]]
then
echo $srvc_id
return
fi
done
}
function get_dns_ips ()
{
local srvc_id=$(get_srvc_id_by_name "$1")
cat <<EOF | scutil | \
sed -nEe '
/ServerAddresses/ {
:ips
n
/[0-9]+ :/ {
s/ *[0-9]+ : ([0-9.]+) */\1/p
b ips
}
}'
show $2:/Network/Service/$srvc_id/DNS
EOF
}
function set_dns_ips ()
{
networksetup -setdnsservers "$@"
}
vpn_srvc_name='MY VPN'
ip_file='/tmp/setup_dns_ips'
pri_srvc_id=$(get_pri_srvc_id)
pri_srvc_name=$(get_srvc_name "$pri_srvc_id")
if [[ ! -e "$ip_file" ]]
then
setup_dns_ips=$(get_dns_ips "$pri_srvc_name" "Setup")
state_dns_ips=$(get_dns_ips "$pri_srvc_name" "State")
setup_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "Setup")
state_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "State")
echo "set_dns_ips $pri_srvc_name $setup_vpn_ips $state_vpn_ips $setup_dns_ips $state_dns_ips"
set_dns_ips "$pri_srvc_name" $setup_vpn_ips $state_vpn_ips $setup_dns_ips $state_dns_ips
if [[ -z "$setup_dns_ips" ]]
then
setup_dns_ips="Empty"
fi
echo $setup_dns_ips >$ip_file
else
setup_dns_ips=$(cat $ip_file)
echo "set_dns_ips $pri_srvc_name $setup_dns_ips"
set_dns_ips "$pri_srvc_name" $setup_dns_ips
rm $ip_file
fi
Замените слово «МОЙ VPN» названием своего VPN-соединения.
После подключения к VPN запустите reset_dns
из окна терминала
Mac OSX использует только DNS-серверы, связанные с вашим «основным» сетевым подключением. Приведенный выше код добавляет DNS-серверы вашего VPN-подключения к основному сетевому подключению (то есть обычно Wi-Fi или Ethernet), так что сначала будут использоваться ваши DNS-серверы VPN, а затем - DNS-серверы основного подключения.
Запустить reset_dns
снова после отключения от VPN, чтобы удалить записи и восстановить исходную конфигурацию DNS-сервера. Однако это необязательно, так как обычно ничему не мешает просто сохранить связанные DNS-серверы.
Я была такая же проблема. Оказывается, мой домашний маршрутизатор находился в том же диапазоне IP-адресов, что и моя рабочая система. Как только я переключил свой домашний маршрутизатор на другой диапазон, я смог подключиться.