На 29.10.2006 00:21 Nikolaj написа:
> И аз да запитам нещо за пптп и 2ри шлюз. По подразбиране си имам влюз. И
> , за да ми върви нет-а трябва да добавя "inet" ип-то като втори шлюз. На
> ръка си бачка, но аз искам да автоматизирам процеса. Преди си спомням,
> че го бях направил като бях добавил "defaultroute" във /etc/ppp/options.
> Но сега неще да бачка, защото вече имам имам сетнат гв по подразбиране.
> Пробвах и със следния ред във /etc/ppp/ip-up :
> route add default gw `ifconfig ppp0|grep "P-t-P"|awk '{print $2}'|cut -d
> ':' -f 2`

На скрипта ip-up се предават следните параметри (описани в примерния файл 
по-долу):
============= примерен файл /etc/ppp/ip-up (взет от Debian) ============
#!/bin/sh
#
# This script is run by the pppd after the link is established.
# It uses run-parts to run scripts in /etc/ppp/ip-up.d, so to add routes,
# set IP address, run the mailq etc. you should create script(s) there.
#
# Be aware that other packages may include /etc/ppp/ip-up.d scripts (named
# after that package), so choose local script names with that in mind.
#
# This script is called with the following arguments:
#    Arg  Name                          Example
#    $1   Interface name                ppp0
#    $2   The tty                       ttyS1
#    $3   The link speed                38400
#    $4   Local IP number               12.34.56.78
#    $5   Peer  IP number               12.34.56.99
#    $6   Optional ``ipparam'' value    foo

# The  environment is cleared before executing this script
# so the path must be reset
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
export PATH

# These variables are for the use of the scripts run by run-parts
PPP_IFACE="$1"
PPP_TTY="$2"
PPP_SPEED="$3"
PPP_LOCAL="$4"
PPP_REMOTE="$5"
PPP_IPPARAM="$6"
export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM

# as an additional convenience, $PPP_TTYNAME is set to the tty name,
# stripped of /dev/ (if present) for easier matching.
PPP_TTYNAME=`/usr/bin/basename "$2"`
export PPP_TTYNAME 

# If /var/log/ppp-ipupdown.log exists use it for logging.
if [ -e /var/log/ppp-ipupdown.log ]; then
  exec > /var/log/ppp-ipupdown.log 2>&1
  echo $0 $*
  echo
fi

# This script can be used to override the .d files supplied by other packages.
if [ -x /etc/ppp/ip-up.local ]; then
  exec /etc/ppp/ip-up.local
fi

run-parts /etc/ppp/ip-up.d \
  --arg="$1" --arg="$2" --arg="$3" --arg="$4" --arg="$5" --arg="$6"

# if pon was called with the "quick" argument, stop pppd
if [ -e /var/run/ppp-quick ]; then
  rm /var/run/ppp-quick
  wait
  kill $PPPD_PID
fi
=================================================================

Това означава, че няма нужда да пишеш скриптове за да намериш даден адрес - 
той се подава като параметър към скрипта.

Пробвах да задам като шлюз по подразбиране IP адреса в другия край на тунела 
(peer IP) - работи (до сега бях задавал IP адреса от отсамната страна на 
тунела (local IP) като шлюз по подразбиране - пак си работи).

Задаване на metric 2 на шлюза, който не трябва да се ползва може да се направи 
с този скрипт:
===== /etc/ppp/ip-up/скрипт ==========================================
#!/bin/bash
/sbin/route add -host 195.138.138.16 gw 10.1.0.1
#/sbin/route add default gw $PPP_LOCAL dev $PPP_IFACE # вариант 1
#/sbin/route add default gw $PPP_REMOTE dev $PPP_IFACE # вариант 2
/sbin/route add default gw $PPP_LOCAL dev $PPP_IFACE metric 1 # вариант 3

/sbin/route -n | grep ^0.0.0.0 | while read route_LINE; do
  echo $route_LINE | cut -d " " -f 8 | grep -v $PPP_IFACE | while read 
route_DEVICE; do
    /sbin/route del default $route_DEVICE
  done
done 

# прочитане на настройките
. /etc/rc.d/rc.inet1.conf
if [ "" != "$GATEWAY" ]; then
 /sbin/route add default gw ${GATEWAY} metric 2
fi
=============================================================================



=============================================================================
[EMAIL PROTECTED]:~$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
87.119.118.2    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
195.138.138.16  10.1.0.1        255.255.255.255 UGH   0      0        0 eth0
195.138.138.192 10.1.0.1        255.255.255.240 UG    0      0        0 eth0
10.10.10.0      10.1.0.1        255.255.255.0   UG    0      0        0 eth0
10.1.0.0        0.0.0.0         255.255.0.0     U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         87.119.118.76   0.0.0.0         UG    1      0        0 ppp0
0.0.0.0         10.1.0.1        0.0.0.0         UG    2      0        0 eth0
[EMAIL PROTECTED]:~$ 
=============================================================================

При отпадане на връзката започва да се ползва шлюза с metric 2 (защото просто 
няма друг шлюз):
=============================================================================
[EMAIL PROTECTED]:~$ /sbin/route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
hoptrop.interbi 10.1.0.1        255.255.255.255 UGH   0      0        0 eth0
195.138.138.192 10.1.0.1        255.255.255.240 UG    0      0        0 eth0
10.10.10.0      10.1.0.1        255.255.255.0   UG    0      0        0 eth0
localnet        *               255.255.0.0     U     0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
default         10.1.0.1        0.0.0.0         UG    2      0        0 eth0
[EMAIL PROTECTED]:~$ 
=============================================================================

Ако шлюзът, който не трябва да се ползва, просто се изтрие, може да се 
възстанови след отпадане на връзката pptp чрез този скрипт:

========= /etc/ppp/ip-down.d/скрипт ============
#!/bin/bash
/etc/rc.d/rc.inet1 start 
================================================

По този начин нещата се опростяват (не се налага да се занимаваме с metric).

> Но , уви, не стана. Честно казано много не ми се иска да ползвам разни
> "изнасилени" методи като горния, защото съм сигурен че такава функция си
> има във pptpclient.
>
> Поздрави.

Май без скриптове няма как да станат нещата...

Ето още един вариант на скрипта от директорията ip-up.d:
================================================
#!/bin/bash

# прочитане на настройките
. /etc/rc.d/rc.inet1.conf

/sbin/route add -host 195.138.138.16 gw ${GATEWAY}
#/sbin/route add default gw $PPP_LOCAL dev $PPP_IFACE # и така работи
/sbin/route add default gw $PPP_REMOTE dev $PPP_IFACE # и така също


if [ "" != "$GATEWAY" ]; then
 /sbin/route del default gw ${GATEWAY}
fi

================================================

В комплект към този скрипт трябва да има и скрипт в /etc/ppp/ip-down.d, който 
да задава шлюз по подразбиране при отпадане на връзката pptp (вж. по-горе).

-- 
Валентин Стойков
http://vstoykov.hit.bg/

Reply via email to