замучался я с этим впн-ом
вообщем, есть первоочередная задача, которая должна была быть сделана позавчера - установка шлюза между "офис" <-> "инет"
ядро, файрволл, прокси, антивирь - сам
впн жрёт моск, а главное ВРЕМЯ, а его мало. горю!
ковырялся субботу + воскресенье - активно рыл по инету, пробовал разные настройки, максимум чего добился: dial -> carrier Disconnected!
вообщем, прошу помощи в настройке, а там уже время появится - разберусь в мелочах
итак, имеем: пров дал ип локалки + шлюз + маску, с которым соединение установлено, он пингуется
пров дал ип впн-сервера, авторизовывающего через pap + chap, с которым имеем:Sep 10 10:31:06 gw ppp[383]: tun0: Phase: deflink: Connected!
Sep 10 10:31:06 gw ppp[383]: tun0: Phase: deflink: opening -> dial
Sep 10 10:31:06 gw ppp[383]: tun0: Phase: deflink: dial -> carrier
Sep 10 10:31:11 gw ppp[383]: tun0: Phase: deflink: Disconnected!
Sep 10 10:31:11 gw ppp[383]: tun0: Phase: deflink: carrier -> hangupфайлы:
/etc/ppp/ppp.conf
default:
set log Phase tun command # you can add more detailed logging if you wish
set ifaddr тут_айпи_впн_прова_без(/0) тут_ип_этого_самого_шлюза(/0 тоже нет) тут_маска_сети_шлюза(кстати, совпадает с маской сети прова)pppoe:
set device pppoe:rl0: # ISP. bez : v konce rugaetsa
set mru 1492
set mtu 1492
set speed sync
accept lqr
disable ipv6cp
# enable lqr
# set lqrperiod 5
# set cd 5
# set crtscts off
# set timeout 0
# set redial 0 0
# accept chap
# accept pap
set authname LOGIN
set authkey PASS
# set dial
# set login
# enable dns
add default HISADDR # otobrajat IP prisoedinennoi storoni/etc/rc.conf
ifconfig rl0 up
ifconfig_rl0="inet тут_локальный_айпи_прова netmask 255.255.255.0 -arp up"
ppp_enable="YES"
ppp_mode="ddial"
ppp_nat="YES"
ppp_profile="pppoe"
keymap="ru.koi8-r"
hostname="gw.domain.com"
gateway_enable="YES"
defaultrouter="тут_шлюз_прова" #ISP gw
firewall_enable="YES" #fw on
firewall_script="/etc/firewall.sh"
firewall_type="close" #fw zapreshaet vse
firewall_logging="YES" #fw pishet logi
natd_program="/sbin/natd"
natd_interface="rl0" #doljen smotret v storonu ISP
tcp_extension="NO" #opasnie rashirenia dla tcp/ip
tcp_keepalive="YES" #menee podverjeni DOS-atakam
tcp_drop_synfin="YES" #ne prinimaem levie paketi
tcp_restrict_rst="YES"
icmp_drop_redirect="YES" #ne rabotaem s ICMP-paketami
icmp_log_redirect="YES" #logi ICMP-paketov
ifconfig_lo0="inet 127.0.0.1" #loopback
ifconfig_xl0="inet 192.168.0.1 netmask 255.255.255.0" #local
syslogd_enable="YES" #demon logov
inetd_enable="NO" #nujen tolko dlya FTP-servera
named_enable="YES" #dns
nfs_client_enable="NO"
nfs_server_enable="NO"
nfs_reserved_port_only="NO"
fsck_y_enable="YES"
portmap_enable="NO" #port mapper off
sshd_enable="YES"
sshd_program="/usr/sbin/sshd"
sshd_flags=""
icmp_bmcastecho="NO" #otveti na soobsheniya echo protokola ICMP
cron_enable="YES"
clear_tmp_enable="YES" #ochistka /tmp pri zagruzke
lpd_enable="NO"
usbd_enable="NO"
sendmail_enable="NO" #s kakogo-to hera eta suka vse-ravno zapuskaetsa. chmod -x sendmail FTW
kern_securelevel_enable="YES"
kern_securelevel="1"
cursor="blink"
keyrate="fast"/etc/firewall.sh (ТЕСТОВЫЙ. РЕАЛЬНЫЙ ФАЙЛ С ПРАВИЛАМИ ПЕРЕИМЕНОВАН)
#!/bin/sh
ipfw='/sbin/ipfw -q'
${ipfw} add 110 allow all from any to any
${ipfw} add 120 allow all from any to any via any/etc/sysctl.conf
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1
net.inet.tcp.sendspace=130000
net.inet.tcp.recvspace=130000
net.link.ether.inet.log_arp_movements=1
net.link.ether.inet.max_age=600
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0
net.inet.icmp.icmplim=100
net.inet.ip.ttl=128
net.inet.ip.redirect=0
net.inet.ip.fw.one_pass=0 #pri 0 paket, vihodyashii iz dummynet, prodoljit hod po pravilam fw
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.ip.random_id=1
net.inet.tcp.msl=15000
net.inet.tcp.icmp_may_rst=0
net.inet.tcp.sack.enable=0
vfs.usermount=0
kern.ipc.somaxconn=1024
#kern.ps_showallprocs=0
#kern.maxusers=256
kern.securelevel=1
#kern.polling.enable=1
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
security.bsd.hardlink_check_uid=0
security.bsd.hardlink_check_gid=0
security.bsd.conservative_signals=1
security.bsd.unprivileged_proc_debug=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_get_quota=0ну и в результате имеем это:
/var/log/ppp.log
Sep 10 11:46:23 gw ppp[919]: tun0: Phase: deflink: Connected!
Sep 10 11:46:23 gw ppp[919]: tun0: Phase: deflink: opening -> dial
Sep 10 11:46:23 gw ppp[919]: tun0: Phase: deflink: dial -> carrier
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: deflink: Disconnected!
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: deflink: carrier -> hangup
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: deflink: Connect time: 5 secs: 0 octets in, 0 octets out
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: deflink: 0 packets in, 0 packets out
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: total 0 bytes/sec, peak 0 bytes/sec on Mon Sep 10 11:46:23 2007
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: deflink: hangup -> opening
Sep 10 11:46:28 gw ppp[919]: tun0: Phase: deflink: Enter pause (30) for redialing.# netstat -nr
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 10.20.1.254 UGS 0 41 rl0
10.20.1/24 link#1 UC 0 0 rl0
10.20.1.31 00:c0:26:2c:c4:d4 UHLW 1 10 lo0
10.20.1.254 link#1 UHLW 2 0 rl0
127.0.0.1 127.0.0.1 UH 0 6 lo0
192.168.0 link#2 UC 0 0 xl0
192.168.0.1 00:01:02:6f:04:0b UHLW 1 0 lo0Internet6:
Destination Gateway Flags Netif Expire
::1 ::1 UHL lo0
fe80::%rl0/64 link#1 UC rl0
fe80::2c0:26ff:fe2c:c4d4%rl0 00:c0:26:2c:c4:d4 UHL lo0
fe80::%lo0/64 fe80::1%lo0 U lo0
fe80::1%lo0 link#3 UHL lo0
ff01:1::/32 link#1 UC rl0
ff01:3::/32 fe80::1%lo0 UC lo0
ff01:4::/32 link#4 UC tun0
ff02::%rl0/32 link#1 UC rl0
ff02::%lo0/32 fe80::1%lo0 UC lo0
ff02::%tun0/32 link#4 UC tun0
# ifconfig
rl0: flags=88c3<UP,BROADCAST,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet6 fe80::2c0:26ff:fe2c:c4d4%rl0 prefixlen 64 scopeid 0x1
inet ИП_ЛОКАЛКИ_ПРОВА netmask 0xffffff00 broadcast 10.20.1.255
ether 00:c0:26:2c:c4:d4
media: Ethernet autoselect (none)
status: no carrier
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=9<RXCSUM,VLAN_MTU>
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:01:02:6f:04:0b
media: Ethernet autoselect (none)
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
Opened by PID 919
вообщем как-то вот так..
данные взяты с неподключённого к инету компа
да и ещё - ядро сконфигурировано с опциями:options IPFIREWALL
options IPDIVERT # NAT
options IPFIREWALL_VERBOSE # fw logging
options IPFIREWALL_VERBOSE_LIMIT=50 # ogr dla zapisei
options TCP_DROP_SYNFIN # ne budem prinimat levie paketi
options ACCEPT_FILTER_DATA # hz
options ICMP_BANDLIM # pomojet v otbivanii DOS-atak
подозреваю, что компактность конфиг-файлов имеет просторы для отпимизации, но это не горит, а горит рабочий шлюз
подозреваю, что tun0 без айпишника в ifconfig не спроста.. и куда вообще айпишник впна делся неясно
также подозреваю, что рутить нужно уметь грамотно..
непонятно, почему tun0 имеет mtu 1500, хотя задавалось 1492
завтра приедет книжка за 700р по фре 6.2, но она всё-равно будет есть время, а его, повторюсь, нету :(
где VPN?нужно просто к нету подключиться через PPPoE?
Или поверх PPPoE надо еще VPN для доступа в нет?
>где VPN?
>
>нужно просто к нету подключиться через PPPoE?
>Или поверх PPPoE надо еще VPN для доступа в нет?нужно через pptp, как оказалось
это я самостоятельно надумал, что раз пров выдал локальный IP, а по нему идёт коннект к VPN-серверу, значит точка-точка over ethernet
позвонил, выяснил - pptpнужно к нету подключиться через VPN
в винде щас настроен интерфейс к прову: "internet", где 10.20.х.х - ип, 10.20.х.х шлюз и маска 255.255.255.0
а по нему настроен VPN с сервером айпи 77.x.x.xтоже самое надо реализовать под фрёй
всё достаточно просто. У меня в нескольких офисах и дома работает следующая схема:
1. прописываешь статичные маршруты для локальной сетки прова и статичный маршрут до VPN сервака прова. Я к примеру это делаю так:
[aleksdj@marfino ~]$ less /usr/local/etc/rc.d/vpngo.sh
#!/bin/sh
#to vpn srv
/sbin/route add -host <vpn прова> <выданный мне шлюз>
#just net
/sbin/route add -net <сетка прова> -netmask 255.0.0.0 <выданный мне шлюз>
#to dns
/sbin/route add -host <dns1 прова> <выданный мне шлюз>
/sbin/route add -host <dns2 прова> <выданный мне шлюз>Вы спросите а нах писать статические маршруты если мона тока дефолт маршрут в rc.conf прописать и забить? объясняю: т.к. vpn сервер находиться в другом сегменте относительно меня, то я должен иметь статический маршрут до него чтобы работала связь с ним, даже тогда, когда подниметься pptp сессия и пропишет СВОЙ ДЕФОЛТНЫЙ МАРШРУТ. Сетку прова я прописываю тоже для того чтобы по ней шариться НЕ ЧЕРЕЗ pptp сессию, а просто через интерфейс. Также и с DNS серверами - зачем еще по туннелю запросы гонять.
2. ставишь pptp клиент для фряхи
3. вояешь следующий конфиг. Хочу подчеркнуть, что все строки после первой начинаются с пробела, иначе работать не будет.
[aleksdj@marfino ~]$ less /etc/ppp/ppp.conf
INET:
set device "!/usr/local/sbin/pptp <vpn srv> --nolaunchpppd"
set authname "логин"
set authkey "пароль"
set timeout 0
set reconnect 10 99 #99 реконнектов при обрыве через каждые 10сек
set ifaddr 0 0
add default HISADDR
alias enable yes
enable dns4. дописываешь в /usr/local/etc/rc.d/vpngo.sh
ppp -background INET5. усе. все будет работать.
Я опустил инфу о настройке фаервола, настройки прав конфигов, и исполняемых файлов. Это всё просто. Так что дерзай. Схема 100% рабочая. пиши если чё.
спасибо, добрый человек. схема и правда 100% рабочая
я ещё не скоро смог бы такое сам родить с полным пониманием, чего я делаю :)
у меня только пара вопросов родилась по-поводу этой схемы для лучшего, так сказать, понимания :)должен ли запускаться ppp вместе с pptp (оба висят в процессах по top, а pptp аж 2 процесса запустил) ?
что за сетка 255.0.0.0 ?
надо ли добавлять в rc.conf строки:
ppp_nat="YES"
vpn_enable="YES"
или ещё какие?надо ли в 6.2 ядро пихать:
options NETGRAPH
options NETGRAPH_PPTPGRE
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_BPFдля полноты картины скажу, что в /etc/firewall.sh я добавлял следующее:
ipfw='/sbin/ipfw -q'
${ipfw} add 150 allow gre from any to any
${ipfw} add 155 allow tcp from me to < vpn прова > dst-port 1723 out
${ipfw} add 160 allow tcp from < vpn прова > 1723 to me inP.S. инфу об каких-то особенных "настройках конфигов и исполняемых файлов" я в нете не видел Оо
на скрипт разумеется chmod +x vpngo.sh
вроде бы и всё ^^
>должен ли запускаться ppp вместе с pptp (оба висят в процессах по
>top, а pptp аж 2 процесса запустил) ?Да, должен, ведь мы как раз используя ppp и устанавливаем соединение point-to-point, просто мы вместо устройства типа /dev/cuaa0(модем на ком-порте) используем /usr/local/sbin/pptp, которому говорим, что не надо юзать PPPD. Данная идея была взята с этого же сайта, к сожалению я забыл автора, и название статьи, но точно помню что рылся в поиске по запросу pptp и обнаружил статью, где использовались оба метода, но этом был лучше. Про два процесса - действительно, пускаются два процесса, только они всегда имеют разные состояния. Причину сказать не могу. Может вы ответите?
>что за сетка 255.0.0.0 ?Это я просто забыл завуалировать в <маска сетки прова>. Ну вот такая сеть у моего прова. Просто сеть, класса А.
>надо ли добавлять в rc.conf строки:
>ppp_nat="YES"
>или ещё какие?нет, не надо, pptp сам занимается натом, вам даже не надо заворачивать пакеты на natd. Их надо только пустить в систему(allow). Но, я к примеру все же дивертю определенные пакеты на natd и вот зачем: я сижу внутри своей сети и хочу зайти, к примеру на какой0то ресурс внутренней сети прова, я набираю этот адрес, далее пакет приходит в мой сервак, И, если пакет не натить, он просто будет выпихнут в сетку прова в сторону того сервака, к которому я стучюсь, он примет этот пакет, но обратно уже ничего не пришлет :-) т.к. он даже не представляет себе что у меня за клиентом pptp висит своя сетка, и соответственно сетка прова не знает к моей сетке маршрута. Короче говоря, я просто натю все пакеты, которые гоняются из моей сетки в сетку прова и обратно. Вот кусок от фаера:
# we NAT only packets goin in local ISP network
$fwcmd add 100 divert natd all from <моя сетка> to <сетка прова> via <физический интерфейс для сетки прова>
$fwcmd add 110 divert natd all from <сетка прова> to me via <физический интерфейс для сетки прова>Естественно natd настроен на трансляцию в физический интерфейс для сетки прова:
natd_enable="YES"
natd_interface="<физический интерфейс для сетки прова>">vpn_enable="YES"
а это еще что? :-) разве Вы видели в скрипте vpngo.sh проверку типа как в скивде на чтение rc.conf и проверки значения YES или NO. Собственно мне было лень писать этот гимор. Просто всё скрипты , имеющие расширения sh автоматически пускаются из /usr/local/etc/rc.d/
>надо ли в 6.2 ядро пихать:
>options NETGRAPH
>options NETGRAPH_PPTPGRE
>options NETGRAPH_MPPC_ENCRYPTION
>options NETGRAPH_BPFНет, не обязяательно.
>P.S. инфу об каких-то особенных "настройках конфигов и исполняемых файлов" я в
>нете не видел Оо
>на скрипт разумеется chmod +x vpngo.sh
>вроде бы и всё ^^всё верно :-)
удачи.
>Собственно мне было лень писать этот гимор. Просто всё
>скрипты , имеющие расширения sh автоматически пускаются из /usr/local/etc/rc.d/Расширение не имеет значения (как и его отсутствие). Скрипт должен быть исполняемым. всё.