FreeBSD: настройка роутера на FreeBSD 6.3 для Корбины

Здесь описан процесс установки по шагам.

1. Ставим как обычно. При смене дисков меняем их не спеша - сначала при запросе на смену жмем Enter, потом извлекаем диск, терпеливо ждем, пока привод определит диск (на это надо секунд 10..15), и только потом еще раз жмем Enter, подтверждая, что поменяли диск.

2. Настраиваем интерфейсы.
# ifconfig
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet loc1.loc3.103.223 netmask 0xfffff800 broadcast loc1.loc3.103.255
ether 00:90:27:29:5b:8e
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 192.168.7.254 netmask 0xffffff00 broadcast 192.168.7.255
ether 00:90:27:be:e6:3c
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
Показывает, какие интерфейсы есть в системе, статус (если кабель воткнут, то должен быть статус active). У меня были интерфейсы fxp0 и fxp1.

# ifconfig fxp1 inet 192.168.0.254 netmask 255.255.255.0
Назначает адрес на интерфейс.

# ping 192.168.0.254
# ping 192.168.0.1
Проверяем работу интефейса (на компе 192.168.0.1 должен быть отключен файервол).

# dhclient fxp0
Проверяем автоназначение адреса с DHCP-сервера Корбины. При этом в файле /var/db/dhclient.leases.fxp0 должна появится запись наподобие:
# more /var/db/dhclient.leases.fxp0
lease {
interface "fxp0";
fixed-address loc1.loc3.103.223;
option subnet-mask 255.255.248.0;
option routers loc1.loc3.96.1;
option domain-name-servers 213.234.192.8,85.21.192.3;
option dhcp-lease-time 604800;
option dhcp-message-type 5;
option dhcp-server-identifier 83.102.233.200;
option classless-routes 8,10,10,160,96,1,24,85,21,79,10,160,96,1,24,85,21,90,10,160,96,
1,28,85,21,138,208,10,160,96,1,27,83,102,146,96,10,160,96,1,24,172,16,16,10,160,96,1,
28,85,21,72,80,10,160,96,1,32,78,107,69,98,10,160,96,1,24,78,107,23,10,160,96,1,28,85,
21,108,16,10,160,96,1;
renew 3 2008/2/6 00:48:28;
rebind 5 2008/2/8 15:48:28;
expire 6 2008/2/9 12:48:28;
}

3. Это мы только тестировали интерфейсы. Чтобы настройки интерфейсов сохранились и применялись после перезагрузки, редактируем файл /etc/rc.conf:
# vi /etc/rc.conf
В файле надо добавить строки:
ifconfig_fxp1="inet 192.168.0.254 netmask 255.255.255.0"
ifconfig_fxp0="DHCP"

4. Включаем сервер ssh. Для этого редактируем файл /etc/rc.conf и добавляем строку:
sshd_enable="YES"

Потом редактируем файл /etc/ssh/sshd_config, раскомментруем и изменяем следующие опции (они должны быть в файле в таком виде, как указано здесь):
...
PermitRootLogin yes
...
PasswordAuthentication yes
...

Перезапускаем сервер sshd (доступны, кроме restart, команды start и stop):
# /etc/rc.d/sshd restart

5. Смотрим, какие есть в системе маршруты:
# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default loc1.loc3.96.1 UGS 0 247 fxp0
10 loc1.loc3.96.1 UGS 0 20 fxp0
loc1.loc3.96/21 link#1 UC 0 0 fxp0
loc1.loc3.96.1 00:15:e9:39:5c:02 UHLW 12 0 fxp0 1200
78.107.23/24 loc1.loc3.96.1 UGS 0 0 fxp0
78.107.69.98/32 loc1.loc3.96.1 UGS 0 0 fxp0
83.102.146.96/27 loc1.loc3.96.1 UGS 0 0 fxp0
85.21.72.80/28 loc1.loc3.96.1 UGS 0 0 fxp0
85.21.79/24 loc1.loc3.96.1 UGS 0 0 fxp0
85.21.90/24 loc1.loc3.96.1 UGS 0 0 fxp0
85.21.108.16/28 loc1.loc3.96.1 UGS 0 0 fxp0
85.21.138.208/28 loc1.loc3.96.1 UGS 0 0 fxp0
localhost localhost UH 0 0 lo0
172.16.16/24 loc1.loc3.96.1 UGS 0 0 fxp0
192.168.7 link#2 UC 0 0 fxp1
192.168.7.1 00:0e:a6:5a:43:56 UHLW 1 14654 fxp1 751
Internet6:
Destination Gateway Flags Netif Expire
localhost localhost UHL lo0
fe80::%lo0 fe80::1%lo0 U lo0
fe80::1%lo0 link#4 UHL lo0
ff01:4:: fe80::1%lo0 UC lo0
ff02::%lo0 fe80::1%lo0 UC lo0

Вместо опции -r можно указать -rn, тогда таблица построится быстрее (без попыток преобразования IP в адреса).

В системе обязательно должен быть маршрут по умолчанию, указывающий на роутер Корбины в её локальной домашней сети (с IP-адресом loc1.loc3.96.1 - этот шлюз по умолчанию раздается по DHCP, когда втыкаете корбиновский кабель во "внешний" интерфейс нашей машинки с FreeBSD):

Destination Gateway Flags Refs Use Netif Expire
default loc1.loc3.96.1 UGS 0 247 fxp0

Если такого маршрута нет, то сервера DNS не будут отвечать (они находятся за роутерами). В этом случае надо добавить маршрут:
# route add default loc1.loc3.96.1

6. Проверяем работу DNS:
# nslookup ftp.corbina.ru
Server: 213.234.192.8
Address: 213.234.192.8#53
ftp.corbina.ru canonical name = earth.corbina.ru.
Name: earth.corbina.ru
Address: 195.14.50.21

7. Проверяем доступность сервера VPN Корбины:
# ping vpn.corbina.net
PING view0.viewdns.corbina.net (85.21.0.90): 56 data bytes
64 bytes from 85.21.0.90: icmp_seq=0 ttl=248 time=1.222 ms
64 bytes from 85.21.0.90: icmp_seq=1 ttl=248 time=1.696 ms
64 bytes from 85.21.0.90: icmp_seq=2 ttl=248 time=1.398 ms

8. Устанавливаем nmap (из пакета) - необязательный шаг. Хотя куда же без него, родимого?

Пакет nmap.tar.gz и порты nmap-4.20.tar.bz2, make-3.81.tar.bz2 были предварительно скачаны из Интернета и положены в корень ftp-сервера 192.168.7.1. Если бы было настроено подключение к Интернету на FreeBSD, то необходимые порты nmap-4.20.tar.bz2 и make-3.81.tar.bz2 скачались бы автоматически. Скачиваем все, что нужно (nmap.tar.gz, порты nmap-4.20.tar.bz2, make-3.81.tar.bz2), с локального (192.168.7.1) ftp:
ftp 192.168.7.1
Connected to 192.168.7.1.
220 Fastream IQ FTP Server
Name (192.168.7.1:root): anonymous
331 Password required for anonymous.
Password:
230 User anonymous has successfully logged in.
Remote system type is Fastream.
ftp> ls
500 'EPSV': command not understood.
227 Entering Passive Mode (192,168,7,1,4,161).
150 Opening data connection for folder list.
dr--r--r-- 1 ftp ftp 0 Sep 09 2007 .
d--------- 1 ftp ftp 0 Sep 09 2007 ..
drw-rw-rw- 1 ftp ftp 0 Sep 09 2007 public
dr--r--r-- 1 ftp ftp 0 Sep 09 2007 torrents
-r--r--r-- 1 ftp ftp 4162 Feb 02 16:21 nmap.tar.gz
-r--r--r-- 1 ftp ftp 2156077 Feb 02 17:17 nmap-4.20.tar.bz2
-r--r--r-- 1 ftp ftp 1151445 Feb 02 17:26 make-3.81.tar.bz2
226 File sent ok
ftp> binary
200 Type set to I.
ftp> get nmap.tar.gz
local: nmap.tar.gz remote: nmap.tar.gz
227 Entering Passive Mode (192,168,7,1,4,162).
150 Opening data connection for nmap.tar.gz.
100% |***********************************************************************************| 4162 2.25 MB/s 00:00 ETA
226 File sent ok
4162 bytes received in 00:00 (41.34 KB/s)
ftp> get nmap-4.20.tar.bz2
local: nmap-4.20.tar.bz2 remote: nmap-4.20.tar.bz2
227 Entering Passive Mode (192,168,7,1,4,183).
150 Opening data connection for nmap-4.20.tar.bz2.
100% |***********************************************************************************| 2105 KB 5.58 MB/s 00:00 ETA
226 File sent ok
WARNING! 8997 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
2156077 bytes received in 00:00 (5.56 MB/s)
ftp> get make-3.81.tar.bz2
local: make-3.81.tar.bz2 remote: make-3.81.tar.bz2
227 Entering Passive Mode (192,168,7,1,5,247).
150 Opening data connection for make-3.81.tar.bz2.
100% |***********************************************************************************| 1124 KB 5.45 MB/s 00:00 ETA
226 File sent ok
1151445 bytes received in 00:00 (5.43 MB/s)
ftp> exit
221 Good Bye!
# копируем файлы в нужные места, чтобы их нашла утилита make
cp nmap-4.20.tar.bz2 /usr/ports/distfiles/
cp make-3.81.tar.bz2 /usr/ports/distfiles/
# распаковываем nmap.tar.gz, в текущей директории появится временная папка nmap
tar -xf nmap.tar.gz
# заходим в папку nmap, там должен быть файл Makefile и файлы пакета.
cd nmap
# запускаем проверку пакета
make
...
# устанавливаем пакет
make install
...
# делаем финальную очистку
make clean
===> Cleaning for gmake-3.81_2
===> Cleaning for nmap-4.20_1
# удаляем папку nmap
rm -r -f nmap
# удаляем файлы make-3.81.tar.bz2, nmap-4.20.tgz и nmap.tar.gz
rm make-3.81.tar.bz2
rm nmap*
# ищем, куда встала nmap
find / -name "nmap" -print
/usr/local/bin/nmap
/usr/local/share/doc/nmap
/usr/local/share/nmap
/usr/ports/security/nmap
# проверяем запуск мана для nmap
man nmap
# тестируем nmap (после перезагрузки не надо будет вводить полный путь до nmap):
/usr/local/bin/nmap vpn.corbina.net
Starting Nmap 4.20 ( http://insecure.org ) at 2008-02-02 17:52 UTC
Interesting ports on vpn28-l0.msk.corbina.net (85.21.0.28):
Not shown: 1696 closed ports
PORT STATE SERVICE
1723/tcp open pptp
Nmap finished: 1 IP address (1 host up) scanned in 551.755 seconds
/usr/local/bin/nmap 192.168.7.1
Starting Nmap 4.20 ( http://insecure.org ) at 2008-02-02 18:02 UTC
Interesting ports on 192.168.7.1:
Not shown: 1694 filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
3389/tcp open ms-term-serv
MAC Address: 00:0E:A6:5A:43:56 (Asustek Computer)
Nmap finished: 1 IP address (1 host up) scanned in 94.131 seconds

10. Устанавливаем mc (Midnight Commander) - необязательный шаг. Это для лентяев (то есть для меня - шибко люблю редактор mcedit и ненавижу vi).
Сначала скачиваем ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/mc-4.6.1.tar.gz. Далее:
cp mc-4.6.1.tar.gz /usr/ports/distfiles
cd /usr/ports/misc/mc
make
...
make install
make clean
rm mc-4.6.1.tar.gz
reboot
Без перезагрузки mc не запускается с ошибкой "Exec format error. Binary file not executable".

11. Установка mpd версии 3.18.
Осталось настроить vpn-соединение с Корбиной (у неё таким образом раздается Интернет). pptpclient у меня почему-то не заработал. Пришлось пробовать mpd:
# cd /usr/ports/net/mpd
# make
# make install
# make clean
# cd /usr/local/etc/mpd
# touch mpd.conf
# mcedit mpd.conf (или vi mpd.conf)

Вставляем следующее содержимое в файл mpd.conf (комментарии я вставил с символом #, их надо из файла убрать):

default:
load vpn

vpn:
new -i ng0 vpn vpn #создается интерфейс ng0, в который входит линк vpn (описан в файле mpd.links)
set iface idle 0 #не разрывать связь при отсутствии исходящих пакетов
set bundle disable multilink #запрет мультилинка
set iface up-script /usr/local/etc/mpd/io-up.sh #запуск скрипта при поднятии bundle - скрипт меняет маршрут по умолчанию
set iface down-script /usr/local/etc/mpd/io-down.sh #запуск скрипта при опускании bundle - скрипт меняет маршрут по умолчанию
set bundle authname "тут_указываем_логин"
set bundle password "тут_указываем_пароль"
set link keep-alive 60 180 #настраивает временнЫе посылки эхо-пакетов LCP. См. описание команды set link keep-alive
set link accept chap #использовать протокол chap
set link no pap #не использовать протокол chap
set bundle disable compression #запрет сжатия
set ccp yes mpp-e40 #разрешает 40-bit MPPE encryption
set ccp no mpp-e128 #запрет 128-bit MPPE encryption
set bundle disable crypt-reqd #отключить требование шифрования
set ccp no mpp-stateless #по этой опции см. help по командам Compression layer
set ipcp no vjcomp #отключает Van Jacobson TCP header compression
set link mtu 1460 #настраивает размер mtu в байтах
open

Создаем также файлы mpd.links, io-up.sh и io-down.sh:
[mpd.links]
vpn:
set link type pptp #устанавливает тип линка
set pptp peer 85.21.0.15 #устанавливает IP VPN-сервера Корбина
set pptp enable originate incoming outcall #см. команды типа устройства PPTP
set pptp disable windowing #см. команды типа устройства PPTP

Строчек set pptp peer .. может быть несколько, например:
set pptp peer 85.21.0.15
set pptp peer vpn.corbina.net
set pptp peer 85.21.0.51

Интересна также опция set link max-redial num, которая задает количество повторных попыток соединения. Если указать num равное 0, то будет бесконечное количество попыток.

Внимание! Если поменяли значения в конфигурационных файлах mpd.conf и mpd.links, то требуется перезагрузка mpd:
# killall -TERM mpd
# mpd -b

Теперь рассмотрим скрипты перенастройки маршрутов io-up.sh и io-down.sh.
[io-up.sh]
#!/bin/sh

route delete $4
route add $4 ВАШ_DEFAULT_GATEWAY
route delete default
route add default $4

echo $4 > /tmp/dr

[io-down.sh]
#!/bin/sh

dr=`cat /tmp/dr`
route delete $dr
route delete default
route add default ВАШ_DEFAULT_GATEWAY
rm -f /var/dr

Редактируем /etc/rc.conf.
defaultrouter="10.160.96.1"
gateway_enable="YES"
keymap="ru.koi8-r"
linux enable="YES"
local startup="/usr/local/etc/rc.d"
moused enable="YES"
mouse port="/dev/psm0"
usbd_enable="YES"
ifconfig_fxp1="inet 192.168.7.254 netmask 255.255.255.0"
ifconfig_fxp0="DHCP"
sshd_enable="YES"
tcp_extensions="YES"
hostname="msinhome.mydomain.ru"
static_routes="localnet dns1 dns2 vpnpptp01 vpnpptp02 vpnpptp03 vpnl2tp01"
route_localnet="-net 10.0.0.0 -netmask 255.0.0.0 10.160.96.1"
route dns1="213.234.192.8 10.160.96.1"
route_dns2="85.21.192.3 10.160.96.1"
route_vpnpptp01="85.21.0.15 10.160.96.1"
route_vpnpptp02="vpn.corbina.net 10.160.96.1"
route_vpnpptp03="85.21.0.51 10.160.96.1"
route_vpnl2tp01="85.21.0.254 10.160.96.1"

Тут ничего особенного в контексте настройки mpd - настроен адрес шлюза по умолчанию 10.160.96.1, прописаны маршруты до DNS-серверов (dns1 и dns2) и vpn-серверов Корбины (vpnpptp01, vpnpptp02, vpnpptp03 и vpnl2tp01). Вы конечно заметили, что адрес шлюза по умолчанию совпадает со шлюзом этих маршрутов, но это сделано не случайно - для надежности, поскольку маршрут по умолчанию удаляется и восстанавливается скриптами io-up.sh и io-down.sh, и бывает, что маршрут по умолчанию теряется. В этом случае работают статические маршруты dns1, dns2, vpnpptp01, vpnpptp02, vpnpptp03 и vpnl2tp01.

Кроме man mpd, дока по mpd в html-формате доступна в папке /usr/local/share/doc/mpd. При перезагрузке по идее должен сразу заработать Интернет. Можно также запустить mpd
вручную, при этом поднимется линк, прописанный в mpd.conf (при этом будет доступна консоль управления mpd):
# mpd
или (при этом будет запущен mpd в фоновом режиме)
# mpd &
или (тоже запуск в фоновом режиме)
# mpd -b

Остановить линк можно, выгрузив mpd командой kill (перед эти узнав id процесса mpd командой ps) или killall. Этими же командами можно посылать процессу mpd стандартные сигналы, которые он может распознать (на обновление конфигурации, выгрузку и т. п. - если интересно, см. man mpd).

При запуске и останове mpd отрабатывают скрипты io-up.sh и io-down.sh соответственно (они перенастраивают маршрут по умолчанию). Когда интерфейс поднят, то команда ifconfig выдает следующую инфу об интерфейсе:
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1460
inet 89.178.134.28 --> 85.21.0.15 netmask 0xffffffff

Когда mpd выгружен, то ifconfig никакой информации по ng0 не выводит.

Соединение и рассоединение с Корбина происходит очень быстро. При установке соединения у меня оно не всегда получалось работоспособным. При этом ifconfig показывает, что виртуальный адаптер находится в состоянии UP:
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1460

Когда соединение работает, то добавляется еще строка, показывающая привязку в публичному IP:
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1460
inet 89.178.131.155 --> 85.21.0.15 netmask 0xffffffff

Сам mpd успешность соединения не отслеживает, нужно переустанавливать соединение вручную (посылая сигналы USR2 и USR1). Можно настроить делать эту процедуру автоматически (см. в конце раздел ссылки).

Автозапуск mpd при старте обеспечивается строкой mpd_enable="YES" в файле /etc/rc.conf. При этом mpd запускается с опцией -b (в каталог /usr/local/etc/rc.d/ после установки автоматически записывается скрипт запуска mpd.sh).

Чтобы писался лог, нужно создать файл /var/log/mpd.log с правами на запись для root (owner), а также добавить в файл /etc/syslog.conf две строчки:
!mpd
*.* /var/log/mpd.log

Чтобы применить настройки немедленно, надо дать команду:
# killall -HUP syslogd

Можно добавить автоматически маршрут на интерфейс при поднятии bundle. Это делается командой set iface route deafult|address[[/width] (без указания длины маски width маршрут будет однохостовый).

См. также описание mpd.

Чтобы раздать через получившийся роутер Интернет на другие компьютеры, нужно поднять ipnat (см. статьи FreeBSD: настройка NAT с помощью ipnat и FreeBSD ipnat: автоматическая поддержка правил NAT в актуальном состоянии).
[Проблемы и методы их решения]

Вышеописанная система работает довольно надежно (в круглосуточном режиме), но иногда приходится устранять возможные проблемы. Все они были связаны с перетурбациями у провайдера. Это понятно - там работают живые люди, меняют оборудование (которое тоже иногда ломается) и бывает допускают ошибки. Мне приходилось сталкиваться с двумя главными проблемами, которые были связаны с изменениями у провайдера:
1. Смена IP у DNS-серверов.
2. Смена IP у VPN-сервера.
3. Кончились деньги на персональном счете.

С первой проблемой автоматически не поборешься, приходится узнавать у провайдера адреса DNS и вручную их вгонять в файл /etc/namedb/named.conf (это конфигурационный файл named), либо обновить адрес на внешнем интерфейсе роутера (командой dhclient fxp0), и после этого найти адреса DNS в файле /etc/resolv.conf.

Вторая проблема немного связана с первой. Дело в том, что в конфигурационном файле /usr/local/etc/mpd/mpd.links есть возможность указать не фиксированный IP, а имя vpn.corbina.net. Но иногда это не работает, когда недоступен сервер DNS, причем сервер VPN в этот момент бывает доступен по IP. Поэтому, если Вы поддались соблазну и вставили в список peer сначала фиксированный IP, то это будет работать очень устойчиво и надежно, без всяких DNS, но до поры до времени - пока не сменится адрес рабочего VPN-сервера PPTP. Иногда старый VPN-сервер не вырубают сразу, а просто бросают, и он начинает "шизить" - сбрасывает сессии, отрабатывает не все маршруты, и такую проблему очень трудно выявить, потому что то работает сеть, то нет. Служба техподдержки обычно тут ничем не может помочь - работающие там операторы часто не знают о смене IP у VPN-сервера, и не могут догадаться, что Ваш mpd до сих пор стучится по IP на VPN-сервер, который заброшен или на профилактике. Обычно техподдержка делает "круглые глаза" (мы FreeBSD не поддерживаем!..), просит переключить компьютер напрямую без роутера, и после этого говорят - вот видите, все работает, выкиньте Вашу FreeBSD, до свидания. После начинаешь проверять - и оказывается, что основной сервер VPN (IP которого резолвится через имя vpn.corbina.net) уже другой. Поэтому старайтесь все-же указывать в файле mpd.links не peer IP, а peer имя, указывающее на сервер VPN.

Устранение некоторых проблем на UNIX можно найти на форуме homenet.corbina.net. Ищите там раздел "Домашний интернет группы компаний "Вымпелком" - форумы > Все о компьютерах > Linux/UNIX".
[Краткая памятка по командам при наладке Интернета]

ifconfig
Узнаем IP адреса на внешней сетевой карте, а так же тут увидим, создался ли виртуальный сетевой адаптер VPN-сессии (у меня это ng0):
msinhome# ifconfig
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 10.160.103.223 netmask 0xfffff800 broadcast 10.160.103.255
ether 00:90:27:29:5b:8e
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
fxp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet 192.168.7.254 netmask 0xffffff00 broadcast 192.168.7.255
ether 00:d0:b7:28:60:71
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1460
inet 78.106.117.234 --> 85.21.0.148 netmask 0xffffffff

netstat -rn
Смотрим прописанные маршруты в системе, видим шлюз по умолчанию (10.160.96.1):
msinhome# netstat -rn
Routing tables

Internet:
Destination Gateway Flags Refs Use Netif Expire
default 85.21.0.148 UGS 0 4136 ng0
10 10.160.96.1 UGS 0 48 fxp0
10.160.96/21 link#1 UC 0 0 fxp0
10.160.96.1 00:15:e9:39:5c:02 UHLW 24 51 fxp0 1199
10.160.96.243 00:1e:8c:a5:b7:ef UHLW 1 3 fxp0 1199
10.160.103.223 00:90:27:29:5b:8e UHLW 2 0 lo0
78.106.117.234 lo0 UHS 0 0 lo0
78.107.23/24 10.160.96.1 UGS 0 0 fxp0
78.107.51/28 10.160.96.1 UGS 0 0 fxp0
78.107.196/22 10.160.96.1 UGS 0 0 fxp0
78.107.235.4/30 10.160.96.1 UGS 0 0 fxp0
83.102.146.96/27 10.160.96.1 UGS 0 0 fxp0
83.102.231.32/28 10.160.96.1 UGS 0 0 fxp0
85.21.0.15 10.160.96.1 UGHS 0 0 fxp0
85.21.0.41 10.160.96.1 UGHS 0 0 fxp0
85.21.0.43 10.160.96.1 UGHS 0 0 fxp0
85.21.0.51 10.160.96.1 UGHS 0 0 fxp0
85.21.0.148 10.160.96.1 UGHS 1 4804 fxp0
85.21.0.254 10.160.96.1 UGHS 0 0 fxp0
85.21.72.80/28 10.160.96.1 UGS 0 98 fxp0
85.21.79/24 10.160.96.1 UGS 0 0 fxp0
85.21.90/24 10.160.96.1 UGS 0 0 fxp0
85.21.108.16/28 10.160.96.1 UGS 0 0 fxp0
85.21.138.208/28 10.160.96.1 UGS 0 0 fxp0
85.21.192.3 10.160.96.1 UGHS 0 117 fxp0
127.0.0.1 127.0.0.1 UH 0 122 lo0
192.168.7 link#2 UC 0 0 fxp1
192.168.7.1 00:0e:a6:5a:43:56 UHLW 1 92733 fxp1 1066
195.14.50.21 10.160.96.1 UGHS 0 39136 fxp0
213.234.192.8 10.160.96.1 UGHS 0 202 fxp0
217.118.84.213/32 10.160.96.1 UGS 0 0 fxp0
217.118.84.249/32 10.160.96.1 UGS 0 0 fxp0
233.32.240 10.160.103.223 UGS 0 0 fxp0

Internet6:
Destination Gateway Flags Netif Expire
::1 ::1 UHL lo0
fe80::%lo0/64 fe80::1%lo0 U lo0
fe80::1%lo0 link#4 UHL lo0
ff01:4::/32 fe80::1%lo0 UC lo0
ff02::%lo0/32 fe80::1%lo0 UC lo0

ping
Ну про эту команду все знают. Первейшая наша задача - проверить доступность сервера VPN, а иногда доступность предполагаемых адресов DNS, да или просто работоспособность Интернета:
ping 10.160.96.1 (проверка шлюза по умолчанию)
ping vpn.corbina.net (проверка сервера PPTP VPN, а заодно и работу сервера DNS).
ping www.mail.ru
ping yandex.ru
ping google.ru

killall -USR2 mpd
Сброс сессии VPN (VPN-соединение разрывается, Интернет перестает работать).

killall -USR1 mpd
Установка новой сессии VPN (Интернет начинает работать).

tail -f /var/log/mpd.log
tail -n 100 -f /var/log/mpd.log
Следим за логом mpd (будет отображаться его хвост) - тут в реальном времени будут видны попытки соединения, и из лога можно выудить много полезной информации (он довольно подробный, что хорошо для диагностики). В приведенном примере показан дамп успешного соединения (сервер VPN в этом случае был найден через DNS по имени vpn.corbina.net - 85.21.0.148).
Jun 23 21:05:13 msinhome mpd: IPADDR 78.106.117.234
Jun 23 21:05:13 msinhome mpd: [vpn] IPCP: state change Ack-Sent --> Opened
Jun 23 21:05:13 msinhome mpd: [vpn] IPCP: LayerUp
Jun 23 21:05:13 msinhome mpd: 78.106.117.234 -> 85.21.0.148
Jun 23 21:05:13 msinhome mpd: [vpn] IFACE: Up event
Jun 23 21:05:13 msinhome mpd: [vpn] setting interface ng0 MTU to 1460 bytes
Jun 23 21:05:13 msinhome mpd: [vpn] exec: /sbin/ifconfig ng0 78.106.117.234 85.21.0.148 netmask 0xffffffff -link0
Jun 23 21:05:13 msinhome mpd: [vpn] exec: /sbin/route add 78.106.117.234 -iface lo0
Jun 23 21:05:13 msinhome mpd: [vpn] exec: /usr/local/etc/mpd/io-up.sh ng0 inet 78.106.117.234 85.21.0.148 msin
Jun 23 21:05:13 msinhome mpd: [vpn] IFACE: Up event

more -f /var/log/mpd.log
Вывод лога полностью. Внимание - файл может оказаться очень большой, до конца не доберетесь. Лучше используйте tail -n 100 -f /var/log/mpd.log (после опции -n указывается нужное число строк).

traceroute
Тоже общеизвестная команда. Строим маршрут до нужного узла, и смотрим, где обрыв:
msinhome# traceroute google.ru
traceroute: Warning: google.ru has multiple addresses; using 74.125.77.104
traceroute to google.ru (74.125.77.104), 64 hops max, 40 byte packets
1 vpn148-l0.msk.corbina.net (85.21.0.148) 1.315 ms 1.341 ms 0.902 ms
2 * * *
3 195.14.54.48 (195.14.54.48) 19.186 ms 19.169 ms 19.345 ms
4 ko-crs-teng0-7-0-4.msk.corbina.net (195.14.54.184) 19.090 ms 19.208 ms 19.031 ms
5 tc-bb-teng3-2.msk.corbina.net (195.14.54.223) 19.281 ms 19.365 ms 19.216 ms
6 bankrost-lgw.Moscow.gldn.net (195.239.10.57) 35.376 ms 19.314 ms 28.946 ms
7 cat01.Frankfurt.gldn.net (194.186.80.233) 48.885 ms 54.160 ms 51.422 ms
8 de-cix10.net.google.com (80.81.192.108) 46.822 ms 46.787 ms 46.559 ms
9 209.85.255.172 (209.85.255.172) 46.932 ms
209.85.255.170 (209.85.255.170) 46.995 ms 46.970 ms
10 209.85.248.182 (209.85.248.182) 50.173 ms
209.85.250.140 (209.85.250.140) 77.381 ms
209.85.248.182 (209.85.248.182) 51.109 ms
11 209.85.248.79 (209.85.248.79) 53.818 ms
64.233.175.246 (64.233.175.246) 53.919 ms 54.180 ms
12 72.14.239.197 (72.14.239.197) 69.100 ms 54.289 ms
72.14.239.199 (72.14.239.199) 54.628 ms
13 209.85.255.106 (209.85.255.106) 59.127 ms
209.85.255.102 (209.85.255.102) 60.501 ms 54.519 ms
14 * * *
15 * * *
16 *^C

Обновлено: 12.03.2015