:: MENU ::
Главная
Looking Glass list
Online Nettools
Online IP Subnet Calculator
Online BGP tools
Основы маршрутизации
BGP протокол
OSPF протокол
Рук-во Quagga
Cisco команды
Ваш IP и провайдер
Файлы
Книги
Полезные ссылки
Советы
Unix ToolBox
IPv4 address space
IPv6 address space
CIDR IPv4
IPv6 prefixes
PPTP / PPPoE
Измерение скорости
Форум / Forum
Статьи (блог)
Контакты
Братья по разуму
github
Настройка PPPoE под FreeBSD :: Настройка PPTP под FreeBSD
| Статья: Настраиваем PPPoE сервер на FreeBSD используя порт MPD5 |
| Статья: PPPoE сервер на встроенном в FreeBSD демоне pppoed |
Пример конфигурационых файлов для поднятия серверов PPTP и PPPoE ( + Radius ) на FreeBSD (MPD)
Пример конфигурационых файлов для клиентской части PPPoE:
(Linux, FreeBSD, OpenBSD, Mac OS X Leopard (10.5), Mac OS X Tiger (10.4), OS/2)
Пример конфигурационых файлов для клиентской части PPTP на FreeBSDПример поднятия роутинга при коннекте
сервер PPPoE
Сервер: /usr/libexec/pppoed Запуск: /usr/libexec/pppoed -a HOSTNAME -p PROVIDER_NAME -l pppoe IFACE_NAME File /etc/ppp/ppp.conf pppoe: set timeout 0 set log Phase tun Chat Command Warning Error Alert Connect lcp ipcp set mtu 1450 set mru 1450 set speed sync set server /var/tmp/pppuser%d "" 0177 allow mode direct disable acfcomp protocomp deflate pred1 pap deny acfcomp protocomp deflate pred1 pap enable chap chap81 mppe lqr set dns 1.1.1.1 2.2.2.2 accept dns File /etc/ppp/ppp.secret login password 10.0.0.36 * * guest guest 10.255.255.2-10.255.255.254 * *
сервер PPPoE + Radius
Сервер pppoe: /usr/libexec/pppoed
Radius: /usr/ports/net/freeradius
File /etc/ppp/ppp.conf
default:
pppoe:
set timeout 0
set log Phase tun Chat Command Warning Error Alert Connect lcp ipcp
set mtu 1450
set mru 1450
set speed sync
set server /var/tmp/pppuser%d "" 0177
allow mode direct
disable acfcomp protocomp
deny acfcomp
disable deflate pred1
deny deflate pred1
disable pap
enable chap
enable chap81
enable MSCHAPv2
set dns 1.1.1.1 2.2.2.2
accept dns
enable lqr
set radius /etc/radius.conf
File /etc/radius.conf
auth RADIUS_SERVER_IP password
acct RADIUS_SERVER_IP password
File /usr/local/etc/raddb/clients.conf
client localhost {
secret = testtest
shortname = localhost
}
File /usr/local/etc/raddb/radiusd.conf
prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
# Location of config and logfiles.
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
log_file = ${logdir}/radius.log
libdir = ${exec_prefix}/lib
pidfile = ${run_dir}/radiusd.pid
user = nobody
group = nobody
max_request_time = 30
delete_blocked_requests = no
cleanup_delay = 5
max_requests = 1024
bind_address = *
#bind_address = 127.0.01
port = 0
#listen {
# ipaddr = *
# port = 0
# type = auth
#}
hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions = yes
log_stripped_names = no
log_auth = yes
log_auth_badpass = yes
log_auth_goodpass = no
usercollide = no
lower_user = no
lower_pass = no
nospace_user = no
nospace_pass = no
# The program to execute to do concurrency checks.
checkrad = ${sbindir}/checkrad
# SECURITY CONFIGURATION
security {
max_attributes = 200
reject_delay = 1
status_server = no
}
# PROXY CONFIGURATION
proxy_requests = no
#$INCLUDE ${confdir}/proxy.conf
# CLIENTS CONFIGURATION
$INCLUDE ${confdir}/clients.conf
# SNMP CONFIGURATION
snmp = no
#$INCLUDE ${confdir}/snmp.conf
# THREAD POOL CONFIGURATION
thread pool {
start_servers = 5
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
}
# MODULE CONFIGURATION
modules {
pap {
encryption_scheme = crypt
}
chap {
authtype = CHAP
}
mschap {
authtype = MS-CHAP
#use_mppe = no
#require_encryption = yes
#require_strong = yes
#with_ntdomain_hack = no
}
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
}
$INCLUDE ${confdir}/sql.conf
radutmp {
filename = ${logdir}/radutmp
username = %{User-Name}
case_sensitive = yes
check_with_nas = yes # ??
callerid = "yes"
}
radutmp sradutmp {
filename = ${logdir}/sradutmp
perm = 0644
callerid = "no"
}
attr_filter {
attrsfile = ${confdir}/attrs
}
always fail {
rcode = fail
}
always reject {
rcode = reject
}
always ok {
rcode = ok
simulcount = 0
mpp = no
}
expr {
}
digest {
}
}
instantiate {
}
authorize {
chap
mschap
sql
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
preacct {
}
accounting {
sql
}
session {
sql
}
post-auth {
}
File /usr/local/etc/raddb/sql.conf
sql {
driver = "rlm_sql_mysql"
server = "localhost"
login = "root"
password = ""
radius_db = "radius"
acct_table1 = "acc"
acct_table2 = "acc"
deletestalesessions = yes
# Print all SQL statements when in debug mode (-x)
sqltrace = yes
sqltracefile = ${logdir}/sqltrace.sql
num_sql_socks = 5
connect_failure_retry_delay = 60
#safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /"
# ------------------------------ requests -----------------------------------
sql_user_name = "%{User-Name}"
default_user_profile = "DEFAULT"
query_on_not_found = no
authorize_check_query = "SELECT id,name,'User-Password',password,'==' FROM users WHERE name = '%{SQL-User-Name}' ORDER BY id"
authorize_reply_query = "SELECT id,name,'Framed-IP-Address',ip_addr,'=' FROM users WHERE name = '%{SQL-User-Name}' ORDER BY id"
accounting_onoff_query = "UPDATE ${acct_table1} SET AcctStopTime='%S' WHERE AcctStopTime=0 AND FromNAS= '%{NAS-Identifier}' AND AcctStartTime <= '%S'"
accounting_update_query = "UPDATE ${acct_table1} \
SET FramedIPAddress = '%{Framed-IP-Address}', \
WHERE AcctSessionId = '%{Acct-Session-Id}' \
AND UserName = '%{SQL-User-Name}' \
AND FromNAS= '%{NAS-Identifier}'"
accounting_update_query_alt = "INSERT into ${acct_table1} \
(AcctSessionId, UserName, FromNAS, AcctStartTime, FramedIPAddress) values \
('%{Acct-Session-Id}', '%{SQL-User-Name}', '%{NAS-Identifier}', \
DATE_SUB('%S',INTERVAL (%{Acct-Session-Time:-0} + %{Acct-Delay-Time:-0}) SECOND),%{Framed-IP-Address}')"
accounting_start_query = "INSERT into ${acct_table1} \
(AcctSessionId, UserName, FromNAS, AcctStartTime, AcctStopTime, FramedIPAddress) values \
('%{Acct-Session-Id}', '%{SQL-User-Name}', '%{NAS-Identifier}','%S',0,'%{Framed-IP-Address}')"
accounting_start_query_alt = "UPDATE ${acct_table1} SET \
AcctStartTime = '%S' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND FromNAS = '%{NAS-Identifier}'"
accounting_stop_query = "UPDATE ${acct_table2} SET \
AcctStopTime = '%S' WHERE AcctSessionId = '%{Acct-Session-Id}' AND UserName = '%{SQL-User-Name}' AND FromNAS = '%{NAS-Identifier}'"
accounting_stop_query_alt = "INSERT into ${acct_table2} \
(AcctSessionId, UserName, FromNAS, AcctStartTime, AcctStopTime, FramedIPAddress) values\
('%{Acct-Session-Id}', '%{SQL-User-Name}', '%{NAS-Identifier}', DATE_SUB('%S', INTERVAL (%{Acct-Session-Time:-0} + %{Acct-Delay-Time:-0}) SECOND), '%S', '%{Framed-IP-Address}')"
simul_count_query = "SELECT COUNT(*) FROM ${acct_table1} WHERE UserName='%{SQL-User-Name}' AND AcctStopTime = 0"
simul_verify_query = "SELECT id, AcctSessionId, UserName, FromNAS, FramedIPAddress FROM ${acct_table1} WHERE UserName='%{SQL-User-Name}' AND AcctStopTime = 0"
# group_membership_query = "SELECT GroupName FROM ${usergroup_table} WHERE UserName='%{SQL-User-Name}'"
# postauth_query = "INSERT into ${postauth_table} (id, user, pass, reply, date) values ('', '%{User-Name}', '%{User-Password:-Chap-Password}', '%{reply:Packet-Type}', NOW())"
#
# Set to 'yes' to read radius clients from the database ('nas' table)
#readclients = yes
}
ADD to file /etc/rc.conf
radiusd_enable="YES"
File rad.sql
# Database : `radius`
#
# Table structure for table `acc`
#
CREATE TABLE `acc` (
`id` bigint(20) NOT NULL auto_increment,
`UserName` varchar(64) NOT NULL default '',
`AcctStartTime` datetime NOT NULL default '0000-00-00 00:00:00',
`AcctStopTime` datetime NOT NULL default '0000-00-00 00:00:00',
`FramedIPAddress` varchar(15) NOT NULL default '',
`FromNAS` varchar(32) NOT NULL default '',
`AcctSessionId` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
# --------------------------------------------------------
#
# Table structure for table `users`
#
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL auto_increment,
`name` varchar(32) NOT NULL default '',
`password` varchar(32) NOT NULL default '',
`ip_addr` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) TYPE=MyISAM;
#
# Table structure for table `ppp_reply`
#
CREATE TABLE `ppp_reply` (
`id` int(11) unsigned NOT NULL auto_increment,
`UserName` varchar(64) NOT NULL default '',
`Attribute` varchar(32) NOT NULL default '',
`op` char(2) NOT NULL default '=',
`Value` varchar(253) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `UserName` (`UserName`(32))
) TYPE=MyISAM;
#
# Dump for table `ppp_reply`
#
INSERT INTO `ppp_reply` (`id`, `UserName`, `Attribute`, `op`, `Value`) VALUES
(1, '', 'Framed-IP-Netmask', '=', '255.255.255.255'),
(2, '', 'Framed-Protocol', '=', 'PPP'),
(3, '', 'Service-Type', '=', 'Framed-User'),
(4, '', 'Framed-MTU', '=', '1492');
PPPoE + PPTP on MPD + Radius
Сервер: /usr/ports/net/mpd
Ядро:
options NETGRAPH #netgraph(4) system
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_ECHO
options NETGRAPH_ETHER
options NETGRAPH_HOLE
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_L2TP
options NETGRAPH_LMI
# MPPC compression requires proprietary files (not included)
#options NETGRAPH_MPPC_COMPRESSION
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_ONE2MANY
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_RFC1490
options NETGRAPH_SOCKET
options NETGRAPH_TEE
options NETGRAPH_TTY
options NETGRAPH_UI
options NETGRAPH_VJC
File /usr/local/etc/mpd/mpd.conf
default:
load ppoe00
load ppoe01
load ppoe02
load pptp00
load pptp01
ppoe00:
new -i ng0 ppoe0 ppoe0
set pppoe iface fxp0
load ppoe_def
ppoe01:
new -i ng1 ppoe1 ppoe1
set pppoe iface fxp1
load ppoe_def
ppoe02:
new -i ng2 ppoe2 ppoe2
set pppoe iface fxp2
load ppoe_def
pptp00:
new -i ng300 pptp0 pptp0
load pptp_def
pptp01:
new -i ng301 pptp1 pptp1
load pptp_def
pptp_def:
set bundle enable multilink
set link type pptp
set link no acfcomp protocomp
set link no pap
set link yes chap-msv1
set link yes chap-msv2
set link yes chap-md5
set ipcp no vjcomp
set ccp no mppc
set ccp no mpp-e40
set ccp no mpp-e56
set ccp no mpp-e128
set ccp yes mpp-stateless
set pptp self 10.11.50.1
set pptp enable incoming
set pptp disable originate
load common
ppoe_def:
set pppoe enable incoming
set pppoe disable originate
set pppoe service "*"
set iface idle 1800
set iface mtu 1500
set iface enable tcpmssfix
set bundle disable multilink
set link yes acfcomp protocomp
set link disable pap chap
set link enable chap
set link mtu 1492
set link mru 1492
set link max-redial -1
set link enable magicnum
set link enable check-magic
set ipcp enable vjcomp
load common
common:
set iface disable on-demand
set ipcp ranges 192.168.1.1/32 10.11.50.0/24
set iface disable on-demand
set iface disable proxy-arp
set link keep-alive 60 180
set bundle max-logins 1
set bundle disable compression
load radius
set ipcp dns 1.1.1.1
radius:
set radius config /etc/radius.conf
set radius retries 3
# set radius timeout 30
set radius me NAME_FROM_HOSTS
set radius acct-update 30
set bundle enable radius-auth
set bundle enable radius-acct
set iface enable radius-session
set ipcp enable radius-ip
File /usr/local/etc/mpd/mpd.links
#
# For our PPTP server
#
pptp00:
set link type pptp
set pptp enable incoming
set pptp disable originate
pptp01:
set link type pptp
set pptp enable incoming
set pptp disable originate
#
# For our PPoE server
#
ppoe0:
set link type pppoe
set pppoe enable incoming
set pppoe disable originate
ppoe1:
set link type pppoe
set pppoe enable incoming
set pppoe disable originate
ppoe2:
set link type pppoe
set pppoe enable incoming
set pppoe disable originate
Для того, что бы к MPD могли конектиться Windows 2000 клиенты нужно:
создаем файлик /usr/ports/net/mpd/files/patch-bb
следующего содержания:
--- src/lcp.c.orig Wed Jul 14 18:02:12 2004
+++ src/lcp.c Wed Jul 14 18:02:13 2004
@@ -564,8 +564,10 @@
if (!LCP_PEER_REJECTED(lcp, TY_ACCMAP))
cp = FsmConfValue(cp, TY_ACCMAP, -4, &lcp->want_accmap);
}
+/*
if (!LCP_PEER_REJECTED(lcp, TY_MRU))
cp = FsmConfValue(cp, TY_MRU, -2, &lcp->want_mru);
+*/
if (lcp->want_magic && !LCP_PEER_REJECTED(lcp, TY_MAGICNUM))
cp = FsmConfValue(cp, TY_MAGICNUM, -4, &lcp->want_magic);
if (lcp->want_callback && !LCP_PEER_REJECTED(lcp, TY_CALLBACK)) {
Далее пересобираем MPD, но патч может и не прокатить и выдать ошибку, для этого
идем в диру work и папку src, ищем файлик lcp.c и коментируем в нем две строчки (выделены в патче)
затем собираем и инсталим MPD
Запуск: /usr/local/sbin/mpd -b
Radius настраивается как в предыдущем примере
Проверка Radius:
Проверка FreeRadius
Для проверки - с локальной машины (надеюсь, ее в clients.conf вписали)
выполняем
radtest user password < IP-адрес radius-сервера > 1812 < пароль к radius-серверу >
, например,
radtest testuser testpassword 10.1.1.1 1812 test2
Конечно, testuser и testpassword должны быть прописаны в базе
пользователей. В итоге получим:
Sending Access-Request of id 148 to 10.1.1.1:1812
User-Name = "testuser"
User-Password = "W\202$Y\374x\251p^\302M\376\202U\212\031"
NAS-IP-Address = host.domain
NAS-Port = 1812
rad_recv: Access-Accept packet from host 10.1.1.1:1812, id=41, length=32
Framed-IP-Address = 10.1.5.2
Framed-IP-Netmask = 255.255.255.255
То-есть, радиус-сервер проверил правильность пароля для этого
пользователя и выдал IP-адрес. В случае, если пароль не прошел, то
получим
rad_recv: Access-Reject packet from host 10.1.1.1:1812, id=148, length=20
сервер PPTP на PopTop
Сервер: /usr/ports/net/poptop/
File /etc/ppp/ppp.conf:
loop:
set timeout 0
set log phase chat connect lcp ipcp command
set device localhost:pptp
set dial
set login
set server /tmp/loop "" 0177
loop-in:
set timeout 0
set log phase lcp ipcp command
allow mode direct
pptp:
debug
load loop
# enable PAP
# enable MSCHAP
enable MSCHAPv2
# enable CHAP
disable deflate pred1
deny deflate pred1
disable pap
# proxyarp
# set mppe * *
disable ipv6cp
#enable mppc
accept dns
set dns 1.1.1.1 2.2.2.2
# set nbns 10.11.50.3
set device !/etc/ppp/secure
File /etc/ppp/secure:
#!/bin/sh
exec /usr/sbin/ppp -direct loop-in
File /etc/ppp/pptpd.conf
option /etc/ppp/ppp.conf
speed 115200
proxyarp
pidfile /var/run/pptpd.pid
File /etc/ppp/ppp.linkdown
pptp:
! sh -c "/usr/local/sbin/vpn_down.pl USER HISADDR INTERFACE UPTIME"
File /etc/ppp/ppp.linkup
pptp:
! sh -c "/usr/local/sbin/vpn_up.pl USER HISADDR INTERFACE"
! sh -c "/usr/local/sbin/vpn_up_log.pl USER HISADDR"
File /usr/local/sbin/vpn_down.pl
#!/usr/bin/perl
use Mysql;
$host="HOST";
$database="DATABASE";
$user="LOGIN";
$pass="PASSWORD";
$dbh = Mysql->Connect($host,$database,$user,$pass) or print $Mysql::db_errstr;
$dbh->SelectDB($database) or print $Mysql::db_errstr;
$action="linkdown";
$x=scalar(@ARGV);
$user=@ARGV[0];
$ext_ip=@ARGV[1];
$uptime=@ARGV[3];
$date=`/bin/date`;
@out=split(' ',$date);
$form_date="@out[1] @out[2] @out[3]";
#print "$uptime\n";
$sth=$dbh->Query("select * from vpn where login='$user'");
@arr=$sth->FetchRow;
while(! ($sth=$dbh->Query("INSERT into vpn_all_log (ownid, login,ext_ip, int_ip, date, up_down, uptime) VALUES ('@arr[4]' ,'$user','@arr[2]','@arr[1]','$form_date','$action','$uptime')"))) {
print "\nretrying ($Mysql:db_errstr)\n";
sleep 3;
}
while(! ($sth=$dbh->Query("DELETE from vpn where login='$user'"))) {
print "\nretrying ($Mysql:db_errstr)\n";
sleep 3;
}
File /usr/local/sbin/vpn_up.pl
#!/usr/bin/perl
use Mysql;
$host="";
$database="";
$user="";
$pass="";
$dbh = Mysql->Connect($host,$database,$user,$pass) or print $Mysql::db_errstr;
$dbh->SelectDB($database) or print $Mysql::db_errstr;
$x=scalar(@ARGV);
$user=@ARGV[0];
$ext_ip=@ARGV[1];
@out=`cat /var/log/ppp.log | grep $user`;
$x=scalar(@out);
@out=split('\[',@out[$x-1]);
@out1=split(' ',@out[0]);
@out=split('\]',@out[1]);
$pid=@out[0];
$out=`ps -ax | grep pptp`;
@out=split('\n',$out);
$x=scalar(@out);
for ($i=0;$i<$x;$i++){
@out2=split(' ',@out[$i]);
if (@out2[0] eq $pid){$o=$i;$i=$x;$pr++;}
}
#open (F,">>/root/vpn_guest.txt");
if ($pr){
@out=split(' ',@out[$o-1]);
@out=`sockstat | grep @out[0]`;
@out=split(' ',@out[0]);
@out=split(':',@out[6]);
$date=sprintf ("%s %s %s",@out1[0],@out1[1],@out1[2]);
$int_ip=@out[0];
@chk_local=split('\.',$int_ip);
$ip=sprintf("10.10.%s.%s",@chk_local[2],@chk_local[3]);
$sth=$dbh->Query("select ownid from ip where ip='$ip'");
@arr1=$sth->FetchRow;
$sth=$dbh->Query("select * from ip where ownid='@arr1[0]'");
$pr=0;
while (@arr2=$sth->fetchrow){
if (@arr2[1] eq $ext_ip){$pr++;}
# print F "@arr2[1] eq $ext_ip\n";
@guest=split('\.',$ext_ip);
$gue="@guest[0].@guest[1].@guest[2]";
if ($gue eq "10.10.255"){$pr++;}
# print F "$gue eq 10.10.255\n";
}
if (!$pr){
print "Fucking Hacker!!!\n";
while(! ($sth=$dbh->Query("INSERT into vpn_unleg (login,ext_ip, int_ip, date, pid) VALUES ('$user','$ext_ip','$int_ip','$date','$pid')"))) {
print "\nretrying ($Mysql:db_errstr)\n";
sleep 3;
}
}
while(! ($sth=$dbh->Query("INSERT into vpn (login,ext_ip, int_ip, date, pid) VALUES ('$user','$ext_ip','$int_ip','$date','$pid')"))) {
print "\nretrying ($Mysql:db_errstr)\n";
sleep 3;
}
while(! ($sth=$dbh->Query("DELETE from vpn where int_ip=''"))) {
print "\nretrying ($Mysql:db_errstr)\n";
sleep 3;
}
}
#close (F);
File /usr/local/sbin/vpn_up_log.pl
#!/usr/bin/perl
use Mysql;
$host="";
$database="";
$user="";
$pass="";
$dbh = Mysql->Connect($host,$database,$user,$pass) or print $Mysql::db_errstr;
$dbh->SelectDB($database) or print $Mysql::db_errstr;
$action="linkup";
$x=scalar(@ARGV);
$user=@ARGV[0];
$assip=@ARGV[1];
open (F,">>/usr/local/www/info/clvpn.html");
@out=`/bin/cat /var/log/ppp.log | grep $user`;
$x=scalar(@out);
@out=split('\[',@out[$x-1]);
@out1=split(' ',@out[0]);
@out=split('\]',@out[1]);
$pid=@out[0];
`/bin/sleep 1`;
$out=`/bin/ps -ax | /usr/bin/grep pptp`;
@out=split('\n',$out);
$x=scalar(@out);
for ($i=0;$i<$x;$i++){
@out2=split(' ',@out[$i]);
if (@out2[0] eq $pid){$o=$i;$i=$x;$pr++;}
}
if ($pr){
print "PID: $pid @out[$o-1]\n";
@out=split(' ',@out[$o-1]);
@out=`sockstat | grep @out[0]`;
@out=split(' ',@out[0]);
@out=split(':',@out[6]);
$int_ip="@out[0]";
$date="@out1[0] @out1[1] @out1[2]";
$sth=$dbh->Query("INSERT into vpn_all_log (login, ownid,ext_ip, int_ip, date, up_down) VALUES ('$user','$pid','$assip','$int_ip','$date', '$action')");
print F "@out1[0] @out1[1] @out1[2]: ";
print F "Login: $user, Local IP: $int_ip, VPN IP: $assip
\n";
print "Login: $user, Local IP: $int_ip, VPN IP: $assip
\n";
}else{
print F "No such process found!\n";
}
close (F);
File /etc/ppp/ppp.secret
login password 10.0.0.36 *
Настройка клиентской части на *nix PPPoE
Внимание! Дефолтного роутинга не должно бытьPPPoE клиент Linux
Установить pppd
Установить пакет PPPoE - Roaring Penguin
Убедиться, что в ядре включена поддержка ррр или поддержка доступна в виде модуля. Если не включена, то пересоберите ядро с поддержкой ррр ppp должен быть с патчем для MS-CHAP V2 Добавить в /etc/ppp/chap-secrets: Login * Password * (где Login и Password - Ваши логин и пароль для входа в VPN) Добавить в /etc/ppp/options:
require-mschap-v2 файл /etc/ppp/pppoe.conf должен выглядеть так: ETH='eth0' #(eth0 - имя Вашего интерфейса) USER='login' #(login - Ваш логин) DEMAND=no DNSTYPE=NOCHANGE PEERDNS=no DNS1= DNS2= DEFAULTROUTE=yes CONNECT_TIMEOUT=30 CONNECT_POLL=2 ACNAME= SERVICENAME=SERVICE_NAME #(SERVICE_NAME - имя сервис нейма выданного провайдером) PING="." CF_BASE=`basename $CONFIG` PIDFILE="/var/run/$CF_BASE-pppoe.pid" SYNCHRONOUS=no CLAMPMSS=1412 LCP_INTERVAL=20 LCP_FAILURE=3 PPPOE_TIMEOUT=80 FIREWALL=NONE LINUX_PLUGIN= PPPOE_EXTRA="" PPPD_EXTRA="" Запуск VPN вручную: pppoe-start Остановка VPN вручную: pppoe-stop Для удаления дефолтного роутинга при загрузке следует закомментировать строки в Mandrake: /etc/sysconfig/network #GATEWAY=XXX.XXX.XXX.XXX
PPPoE клиент FreeBSD:
Включить следующее в /etc/ppp/ppp.conf: pppoe: set log Phase Chat LCP IPCP CCP tun command set device PPPoE:iface:srvname #Заменить iface на Ваш интерфейс (например, rl0), а srvname заменить на service-name вашего провайдера set authname login #Заменить login на Ваш логин set authkey password #Заменить password на Ваш пароль enable lqr set dial set login set ifaddr 0.0.0.0/0 0.0.0.0/0 add default HISADDR Примечание: Строки после метки (рррое:) должны начинаться с пробела! Запуск VPN вручную: ppp -ddial pppoe Остановка VPN вручную: killall -9 ppp ifconfig delete tun0 Запуск VPN при загрузке: Включить следующее в /etc/rc.conf: ppp_enable="YES" ppp_mode="ddial" ppp_profile="pppoe" ppp_nat="NO" ppp_user="root"
PPPoE клиент OpenBSD:
Включить следующее в /etc/ppp/ppp.conf:default: set log Phase Chat LCP IPCP CCP tun command set redial 15 0 set reconnect 15 10000 pppoe: set device "!/usr/sbin/pppoe -n starnet -i sk0" # Вместо sk0 подставить имя вашего интерфейса set mtu max 1492 set speed sync disable acfcomp protocomp deny acfcomp enable lqr set dial set login set timeout 0 set authname MyName # Логин, без кавычек set authkey MyPass # Пароль без кавычек add! default HISADDR enable dns enable mssfixup Запуск VPN вручную: ppp -ddial pppoe Остановка VPN вручную: kill -9 ppp-pid #ppp-pid - номер процесса ppp демона ifconfig delete tun0 Запуск VPN при загрузке: Включить следующее в /etc/rc.local: ppp -ddial pppoe
PPPoE клиент Mac OS X Leopard (10.5)
1. Перейдите в "System Preferences"
Сделайте клик по "Network" (Скриншот №1)

Скриншот №1
2. Выберите слева в колонке интерфейс "Ethernet:"
Выберите в строке "Configure:" пункт "Manually"
В поле "IP Address:" введите ваш IP-адрес
В поле "Subnet Mask:" нужно указать маску подсети, например "255.255.255.0" (Скриншот №2)
Слева в колонке нажмите кнопку "+" (плюс)
Нажмите "Apply"

Скриншот №2
3. Выберите в строке "Interface:" пункт "PPPoE"
Выберите в строке "Ethernet:" пункт "Ethernet"
В поле "Service Name:" вписываем "PPPoE" (Скриншот №3)
Нажмите "Create"

Скриншот №3
4. В поле "Service Name:" вписываем сервис-нейм выданный провайдером, например starnet
Далее Вам нужно заполнить поля "Account Name" и "Password" (Скриншот №4)
"Account Name" = "Пользователь"
"Password" = "Пароль"
Нажмите "Advanced"

Скриншот №4
5. Выберите вкладку "TCP/IP"
Выберите в строке "Configure IPv4:" пункт "Using PPP"
Выберите в строке "Configure IPv6:" пункт "Off" (Скриншот №5)

Скриншот №5
6. Выберите вкладку "PPP"
Отметьте пункт "Send PPP echo packets"
Отметьте пункт "Use verbose logging" (Скриншот №6)
Нажмите "OK"
Когда окно закроется, нажмите кнопку "Connect"

Скриншот №6
PPPoE клиент Mac OS X Tiger (10.4)
1. Перейдите в "System Preferences"
Сделайте клик по "Network" (Скриншот №1)

Скриншот №1
2. Выберите в строке "Show:" пункт "Built-in Ethernet"
Выберите вкладку "TCP/IP"
Выберите в строке "Configure IPv4:" пункт "Manually"
В поле "IP Address:" введите ваш IP-адрес
В поле "Subnet Mask:" ввести маску подсети, например"255.255.255.0" (Скриншот №2)
Выберите в строке "Show:" выберите "Network Port Configurations" и нажмите "New"
Нажмите "Apply"

Скриншот №2
3. В поле "Name:" введите "PPPoE"
Выберите в строке "Port:" пункт "Built-in Ethernet" (Скриншот №3)
Нажмите "OK"

Скриншот №3
4. Выберите вкладку "PPPoE"
Отметьте пункт "Connect using PPPoE"
Отметьте пункт "Show PPPoE status in menu bar"
Далее Вам нужно заполнить поля "Account Name" и "Password" (Скриншот №4)
"Account Name" = "Пользователь"
"Password" = "Пароль" –
В поле "PPPoE Service Name:" вписываем сервис-нейм выданный провайдером, например starnet
Нажмите "PPPoE Options"

Скриншот №4
5. Отметьте пункт "Send PPP echo packets"
Отметьте пункт "Use verbose logging" (Скриншот №5)

Скриншот №5
6. Выберите в "menu bar" иконку "PPPoE"
Выберите пункт "Connect" (Скриншот №6)

Скриншот №6
PPPoE клиент OS/2
Клиент:SafeFire PPP/Links (SFL)
сайт разработчика: http://www.lgs.kiev.ua
файл для скачивания: http://www.lgs.kiev.ua/beta/sf11-12.zip
Установка:
Разархивировать sf11-12.zip во временный каталог
Запустить install.cmd и инсталлировать SFL.
Инсталлятор попросит указать каталог для установки и разрешение на изменение файла CONFIG.SYS
Указать полный путь и разрешить модификацию.
Настройка:
Определим что:
%LGSDIR% - полный путь к каталогу, в который производилась установка SFL;
%BOOTDRV% - буква диска, с которого загружалась OS/2.
Подключить SFL к сетевому интерфейсу, следуя указаниям из документации %LGSDIR%\doc\eng\pppoe.htm
Процесс описан детально, включая скриншоты окон.
Перед выполнением данной настройки настоятельно рекомендуется сделать копию файлов %BOOTDRV%:\CONFIG.SYS и %BOOTDRV%:\IBMCOM\PROTOCOL.INI
В каталоге %LGSDIR%\config находим файл OE_MEDIUM.CFG
Это текстовой файл, который можно редактировать в любом текстовом редакторе.
В этом файле находим секцию [ppp]
По умолчанию она выглядит следующим образом:
-----------
[ppp] @include "oe_ppp" auth.client.clientname=ENTER YOUR USER NAME HERE auth.client.clientpass=ENTER YOUR PASSWORD HERE-----------
Заменяем:
ENTER YOUR USER NAME HERE на "Пользователь"
ENTER YOUR PASSWORD HERE на "Пароль" –
Так-же в данную секцию дописываем следующими строками:
-----------------------------
;установка параметров авторизации auth.server.chap.enabled=1 auth.server.chap.servername=starnet ;динамически назначать адреса ip.address=0 ip.peeraddress=0-----------------------------
В итоге секция выглядит следующим образом (пример):
-----------------------------
[ppp] @include "oe_ppp"-----------------------------
auth.client.clientname=12345-1 auth.client.clientpass=123456 auth.server.chap.enabled=1 auth.server.chap.servername=starnet ip.address=0 ip.peeraddress=0
Сохраняем файл.
В том-же каталоге, где расположен файл oe_medium.cfg,
находим файл DEFAULT.CFG и открываем его для редактирования.
Находим секцию [oe_ppp]:
-----------------------------
[oe_ppp] load=pl_ppp:pppoe bind=ethernet:ether.io lcp.recv.mru=1492 lcp.send.mtu=1492-----------------------------
В эту секцию необходимо добавить одну строку:
-----------------------------
pppoe.servicename=starnet-----------------------------
Строчки:
-----------------------------
"lcp.recv.mru=1492" "lcp.send.mtu=1492"-----------------------------
можно закомментировать.
В итоге секция выглядит следующим образом (пример):
-----------------------------
[oe_ppp] load=pl_ppp:pppoe bind=ethernet:ether.io ;lcp.recv.mru=1492 ;lcp.send.mtu=1492 pppoe.servicename=starnet-----------------------------
Сохраняем файл.
Теперь необходимо добавить автоматическую загрузку SFL при старте системы.
Для этого в каталоге %LGSDIR%\bin создаём коммандный файл RUNPPPOE.CMD следующего содержания:
-----------------------------
SETLOCAL CD %LGSDIR%\bin DETACH sfppp -Coe_medium.cfg ENDLOCAL-----------------------------
Наиболее оптимальным, на мой взгляд, является вызов данного коммандного файла сразу после инициализации сетевых интерфейсов.
Для этого в файл %BOOTDRV%:\MPTN\BIN\setup.cmd добавляем строку:
-----------------------------
call %LGSDIR%\bin\RUNPPPOE.CMD-----------------------------
Примерный вид файла %BOOTDRV%:\MPTN\BIN\setup.cmd
-----------------------------
route -fh-----------------------------
arp -f
ifconfig lo 127.0.0.1 ifconfig lan0 192.168.XX.YY netmask 255.255.255.0 metric 0 mtu 1492 REM ifconfig lan1 nil metric 1 mtu 1500 REM ifconfig lan2 nil metric 1 mtu 1500 REM ifconfig lan3 nil metric 1 mtu 1500 REM ifconfig lan4 metric 1 mtu 1500 REM ifconfig lan5 metric 1 mtu 1500 REM ifconfig lan6 metric 1 mtu 1500 REM ifconfig lan7 metric 1 mtu 1500 REM ifconfig sl0 route add default 192.168.XX.ZZ -hopcount 1 ipgate on call %LGSDIR%\bin\RUNPPPOE.CMD detach fssd cfgfilt -u -i -d
Перезагружаем систему.
Проверено на OS/2 Warp 4.0 with fix16 + postfix (kernel: 14.091a)
inetver:
Version numbers of TCP/IP protocol drivers:
SOCKETS.SYS: 6.3100
AFOS2.SYS: 6.3100
AFINET.SYS: 6.3100
Настройка клиентской части PPTP на FreeBSD
Установить: /usr/ports/net/pptpclientДобавляем запуск при загрузке компа File: /usr/local/etc/rc.d/vpn.sh
#!/bin/sh /etc/ppp/vpn_up.sh &
Делаем файл с бесконечным циклом:
File /etc/ppp/vpn_up.sh
#!/bin/sh while [ 1 ] do /usr/local/sbin/pptp PPTP_SERVER_IP mypptp sleep 5 doneЗамените PPTP_SERVER_IP на IP-адрес сервера вашего провайдера
File /etc/ppp/ppp.conf
#Название соединения mypptp: set authname USERNAME set authkey PASSWORD set timeout 0 set ifaddr 0 0 add default HISADDRВнимание ! Все строки после mypptp начинаются с пробела, это обязательно !
Делаем файлы исполняемыми:
chmod a+x /usr/local/etc/rc.d/vpn.sh chmod a+x /etc/ppp/vpn_up.sh
Запускаем /usr/local/etc/rc.d/vpn.sh
Итог: Если соединение разорвется, то оно само восстановится из-за бесконечного цикла.
Поднятие роутинга
Сервер: MPD
Описание:
к 1-му серверу по PPTP цепляются несколько клиентов
Клиенты нумеруются по номеру (последний октет IP-адреса): 2,3,4,5 и т.д.
После входа в PPTP каждому клиенту выдается IP 192.168.10.ХХ, где ХХ номер клиента.
Задача:
нужно при коннекте определенного клиента добавлять роутинг до какой либо сети через этого клиента
например:
/sbin/route add 192.168.12.0/24 192.168.100.2
/sbin/route add 192.168.11.0/24 192.168.100.3
/sbin/route add 192.168.14.0/24 192.168.100.4
/sbin/route add 192.168.16.0/24 192.168.100.5
Решение:
File mpd.conf:
pptp00:
new -i ng0 pptp0 pptp0
set iface up-script /usr/local/etc/mpd/lup.pl
set iface down-script /usr/local/etc/mpd/link-down
load pptp_def
File lup.pl:
#!/usr/bin/perl
@net=("","",12,11,14,16);
open (F,">>/usr/local/etc/mpd/liup.log");
$date=`date`;
if ($ARGV[3]=~/^\d{1,3}\.\d{1,3}\.\d{1,3}\.(\d{1,3})$/){
$cmd=sprintf ("/sbin/route add 192.168.%s.0/24 -iface %s",$net[$1],$ARGV[0]);
printf F ("Date: %s > addr: %s [%s]\n\n",$date,$ARGV[3],$cmd);
`$cmd`;
}else{
printf F ("Date: %s > Fuckup in address: %s\n\n",$date,$ARGV[3]);
}
close (F);
где $1 возникает из регекспа, $1 это (\d{1,3}), т.е. то что заключено в скобки
массив @ARGV это то что передает MPD при коннекте клиента
посмотреть что отдает MPD можно так:
создать файл ну например link-up и в нем:
echo $1 >>/usr/local/etc/mpd/param
echo $2 >>/usr/local/etc/mpd/param
echo $3 >>/usr/local/etc/mpd/param
echo $4 >>/usr/local/etc/mpd/param
echo $5 >>/usr/local/etc/mpd/param
echo $6 >>/usr/local/etc/mpd/param
далее прописать его в mpd.conf как скрипт линкапа set iface up-script /usr/local/etc/mpd/link-up

