/etc/conf.d/net и управление отдельными интерфейсами.

Добрый день.

Волею судеб сменил провайдера и теперь ковыряю настройки сети.

Цель: получить постоянное соединение с локальной сетью и с впн провайдера (через pptp или l2tp), которое фильтруется/NATится фаерволлом и переподключается автоматически без моего участия.

Исходные данные: net-dialup/xl2tpd-1.1.12-r1, net-dialup/pptpclient-1.7.1-r1, net-dialup/ppp-2.4.4-r21 (pam). Часть конфигов брал отсюда http://homenet.corbina.net/index.php?showforum=629&prune_day=100&sort_by=Z-A&sort_key=last_post&topicfilter=all&st=30

Имею сейчас следущее:

ls -l /etc/init.d/net*
lrwxrwxrwx 1 root root    18 Сен 14  2008 /etc/init.d/net.eth0 -> /etc/init.d/net.lo
lrwxrwxrwx 1 root root    18 Сен 14  2008 /etc/init.d/net.eth1 -> /etc/init.d/net.lo
lrwxrwxrwx 1 root root    18 Сен 17  2008 /etc/init.d/net.eth2 -> /etc/init.d/net.lo
-rwxr-xr-x 1 root root 15179 Апр 25 21:35 /etc/init.d/net.lo
-rwxr-xr-x 1 root root  2074 Апр 25 21:35 /etc/init.d/netmount
lrwxrwxrwx 1 root root    18 Апр 24 19:21 /etc/init.d/net.ppp0 -> /etc/init.d/net.lo
# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d.  To create a more complete configuration,
# please review /usr/share/doc/openrc/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).

config_eth1="192.168.10.1/24"

config_eth2="192.168.20.1/24"


modules="dhcp"
config_eth0="dhcp"


VPNSERV='vpn.internet.beeline.ru'

config_ppp0="ppp"
link_ppp0="pty 'pptp $VPNSERV --nolaunchpppd --nobuffer --loglevel 1'"

## name: группа цифр без @internet.beeline.ru, хотя некоторым он нужен. Это надо на месте проверять.
username_ppp0='name'
password_ppp0='pass'

pppd_ppp0="
   nodefaultroute
   lock
   noauth
   refuse-eap
   refuse-chap
   refuse-mschap
   nobsdcomp
   nodeflate
   persist
   debug
   maxfail 0
   holdoff 10
   lcp-echo-interval 10
   lcp-echo-failure 9
"

#preup() {
#   if [ "${IFACE}" = "ppp0" ]; then
#      /bin/mknod /dev/ppp c 108 0
#   fi
#}

postup() {
    echo postup ${IFACE}
    route -n

    ETH0_IP=$(ifconfig | grep 'inet addr:10.2' | sed -r 's/^.*addr:(\S+).*$/\1/')
    ETH0_GW=$(route -n | grep UG | grep eth0 | grep -v '127.0.0.1' | sed -r 's/^\S+\s+(\S+).*$/\1/')
    echo IP=${ETH0_IP}, GW=${ETH0_GW}

    if [ "${IFACE}" = "eth0" ]; then
        # указываем маршрут до ip dns-серверов
        for ip in 213.234.192.8 85.21.192.3; do
            route add $ip gw $ETH0_GW;
        done
        # Адреса VPN-серверов берутся с DNS-сервера Корбины
        for vpnaddr in $(host $VPNSERV | awk '{ print $NF }'); do route add $vpnaddr gw $ETH0_GW; done;
    fi

    if [ "${IFACE}" = "ppp0" ]; then
# Из-за того, что адрес VPN-сервера совпадает с адресом шлюза,
# создаваемый автоматически маршрут к VPN-серверу использует интерфейс ppp0, а не eth0, исправляем
        VPN=$(ifconfig | grep 'P-t-P' | awk '{print $3}' | awk -F: '{print $2}');
        echo VPN=$VPN;
        route del $VPN dev ppp0;
# Удаление шлюза по умолчанию в локалку и добавление шлюза по умолчанию в инет
        route del default;
        route add default dev ppp0;
        route add $VPN gw $ETH0_GW dev eth0;
    fi
return 0
}

postdown() {
# Добавление маршрута по умолчанию в локалку
    if [ "${IFACE}" = "ppp0" ]; then
       killall xl2tpd pppd
        route add default dev eth0
    fi
return 0
}


# Перед запуском vpn должен быть поднят eth0
depend_ppp0() {
        need net.eth0
}

Проблемы в данной конфигурации:

  • Несмотря на участок
        if [ "${IFACE}" = "ppp0" ]; then
    # Из-за того, что адрес VPN-сервера совпадает с адресом шлюза,
    # создаваемый автоматически маршрут к VPN-серверу использует интерфейс ppp0, а не eth0, исправляем
            VPN=$(ifconfig | grep 'P-t-P' | awk '{print $3}' | awk -F: '{print $2}');
            echo VPN=$VPN;
            route del $VPN dev ppp0;
    # Удаление шлюза по умолчанию в локалку и добавление шлюза по умолчанию в инет
            route del default;
            route add default dev ppp0;
            route add $VPN gw $ETH0_GW dev eth0;
        fi

    , при запуске /etc/init.d/net.ppp0 start не печатается echo VPN=$VPN, не меняются маршруты

  • При перезапуске /etc/init.d/net.ppp0 restart не происходит соединения вот с таким сообщением:
    sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x143da190> <pcomp> <accomp>]
    Apr 26 13:52:42 homegate pptp[7410]: anon warn[open_inetsock:pptp_callmgr.c:326]: connect: No route to host
    Apr 26 13:52:42 homegate pptp[7410]: anon fatal[callmgr_main:pptp_callmgr.c:124]: Could not open control connection to 85.21.0.81

    Проверка показала, что через определённое время ip vpn сервера при запросе выдаётся новый. К сожалению, по вышеуказанной причине воткнуть строку определения и задания маршрута до впн сервера в ${IFACE}" = "ppp0" не удаётся.

Имхо, можно добавлять маршрут

Имхо, можно добавлять маршрут на всю подсеть с VPN-серверами - 85.21.0.0/24

Owl's are not what they seem...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".