Архивы: linux

OpenVPN поверх PPPOE ( openvpn over pppoe redirect-gateway def1 )

Существует проблема замены маршрута по умолчанию при использовании openvpn поверх pppoe
дело в том, что pppoe поднимается с неправильным маршрутом по умолчанию, выглядит он вот так

Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0

опенвпну не нравится gateway поэтому его нужно исправить, например на вот такой

Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0         222.222.222.22  0.0.0.0         UG    0      0        0 ppp0

для этого создадим файл

/etc/ppp/ip-up.d/default-gateway

не забываем задать ему chmod u+x
с таким содержимым

#!/bin/bash

if [ $(ip route list exact default |\
  awk '/^default/ {print $2}') = dev ];
then
         IF=$(ip route | awk '/^default/ {print $3}')
         GW=$(ip address show $IF |\
  awk '/peer/ {print $4}' | cut -d"/" -f1)
         ip route replace default via $GW dev $IF
fi

если руками выполнить этот скрипт то он предложит сделать примерно вот такое

ip route replace default via 222.222.222.22 dev ppp0

После чего опенвпн успешно подменит маршрут на свой, и трафик полетит в нужную сторону.

если до какого-то хоста нам нужно пустить трафик вне ОпенВПна, например до своего хоста, для подключения по ssh, то в этот же файл добавляем

#my route 91.91.91.91
route add 91.91.91.91 gw 222.222.222.22 dev ppp0

если шлюз динамический, то используем $GW вместо 222.ххх

Узнать модель материнской платы linux

Начала на одном сервере на основе PC помирать мама, то включается с 20й попытки то на этапе биоса повиснет… в общем пора менять, но как узнать что там? онаж в стойке в куче проводов и т.п.

нибеда

[cc lang=”bash”]
dmidecode
[/cc]

и внимательно изучить

можно например посмотреть какой процессор
[cc lang=”bash”]

# dmidecode 2.9
SMBIOS 2.4 present.
32 structures occupying 1517 bytes.
Table at 0x000E3410.

Handle 0x0000, DMI type 4, 35 bytes
Processor Information
Socket Designation: CPU1
Type: Central Processor
Family:
Manufacturer: Intel(R) Corporation
ID: 76 06 01 00 FF FB EB BF
Version: Intel(R) Core(TM)2 Extreme CPU X9650 @ 3.00GHz
Voltage: 1.6 V
External Clock: 333 MHz
Max Speed: 4000 MHz
Current Speed: 3000 MHz
Status: Populated, Enabled
Upgrade: Socket LGA775
L1 Cache Handle: 0x0003
L2 Cache Handle: 0x0001
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
[/cc]

Версию биоса

[cc lang=”bash”]
BIOS Information
Vendor: Intel Corp.
Version: BTX3810J.86A.2006.2009.1023.1057
Release Date: 10/23/2009
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 2048 kB
[/cc]

ну и маму

[cc lang=”bash”]
Base Board Information
Manufacturer: Intel Corporation
Product Name: DX48BT2
Version: AAE26191-204
Serial Number: BQBQ815001VQ
Asset Tag: Base Board Asset Tag
Features:
Board is a hosting board
Board is replaceable
Location In Chassis: Base Board Chassis Location
Chassis Handle: 0x0007
Type: Unknown
Contained Object Handles: 0
[/cc]

Также можно посмотреть какие PCI устройства (точнее то, что у нас есть на “южном мосту”) у нас есть
[cc lang=”bash”]
lspci
[/cc]

linux два интерфейса (linux два провайдера)

Как и обещал, пишу.
Довольно много времени потратил на понимание происходящего..

И так есть у меня сервер, он же ОпенВПН сервер в одной организации. и вот упёрлась организация в ширину канала, собственно беда в том, что по этому же каналу ходил SIP трафик, и сильно “лагал” когда ширины канала не хватало 🙁

Подключаем ещё один канал от второго провайдера. есть сервер в нём внешний канал (eth1), локальная сеть(eth0), ещё ходит OpenVPN (tun0) для связи с остальными филиалами.

Добавился ещё один внешний провайдер (eth4). для его подключение я сделал так.
Напомню, что linux умеет работать с несколькими таблицами маршрутизации

Тоесть для удобства я могу для каждого своего филиала создать табилцу маршрутизации, и в ней уже удобно управлять маршрутами, потом мне не надо будет листать простыню маршрутов таблицы main

в файл [cc lang=”bash”] /etc/iproute2/rt_tables[/cc]
Добавил 2 таблицы
[cc lang=”bash”]
201 T1
202 T2
[/cc]
У каждого провайдера будет своя таблица маршрутизация
Т1 – первый провайдер
Т2 – второй

Создал скрипт, что будет заведовать маршрутизацией.
[cc lang=”bash”]#!/bin/sh
IP1=217.111.111.99
IP2=94.11.111.81
P1=217.111.111.97
P2=94.11.111.82
IF1=eth1
IF2=eth4
# добавим дефаулт гетвей в каждую таблицу.
ip route add default via $P1 table T1
ip route add default via $P2 table T2
# Говорим, что по дефолту будем ходить через первого провайдера.
ip route add default via $P1
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
#Перечисляю хосты, что будут ходить через новый интерфейс вот так
#Но не забываем их указывать в NAT iptables
ip rule add from 192.168.5.107 table T2
ip rule add from 192.168.5.108 table T2
ip rule add from 192.168.5.112 table T2
ip rule add from 192.168.5.199 table T2
#Это так на всякий случай
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

[/cc] Где
IP# это ИП адрес на интерфейсе,
P# шлюз на интерфейсе
после этого сервер отвечает по обоим интерфейсам. также пинги/трацерты с сервера ходят через нужный интерфейс.
[cc lang=”bash”] ping -I eth4 ya.ru [/cc]
теперь мне нужно что нужные мне клиенты ходили через этот интерфейс наружу. в iptables.up.rules у меня есть правила НАТа
[cc lang=”bash”]
-A POSTROUTING -s 192.168.5.102 -o eth4 -j MASQUERADE
-A POSTROUTING -s 10.10.10.6 -o eth4 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -o eth1 -j MASQUERADE
-A POSTROUTING -s 10.10.0.0/255.255.0.0 -o eth1 -j MASQUERADE
[/cc]
первыми 2мя строками я хочу чтоб вот 192.168.5.102 и 10.10.10.6 НАТились через нового провайдера. rp_filter выключаем вот так в sysctrl
[cc lang=”bash”]
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[/cc]

Теперь, надо понимать, что если идёт пакет на 192.168.5.108, то он попадает в таблицу T2 а в ней у нас что? правильно один только дефаултгетвей! а что такое другие подсети филиалов и ОпенВПН мы знать не знаем, поэтому тоже необходимо добавить маршрут в таблицу Т2 для указания где у нас ходятся 10.10.10.0
[cc lang=”bash”]ip route add 10.10.10.0/24 via 10.10.10.2 dev tun0 table T2[/cc]

Всё это кидаем в первый скрипт, а скрипт в автозагрузку. Теперь ещё важный момент, браузер у нас работает прозрачно через squid3 и получается, что весь трафик ходит через один интерфейс, а хттп трафик ходит через другой, не хорошо получается. поэтому читаем вот эту статью

Как определить какой linux установлен.

Вот заставляет же жизнь под админивать сервера, и зачастую это нечто старое типо 6-9 редхата и тому подобные древности.

Дистрибутив можно определить несколькими способами.
[cc lang=”bash”]cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION=”Ubuntu 8.04.2″[/cc]
Также можно.
[cc lang=”bash”]lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 8.04.2
Release: 8.04
Codename: hardy[/cc]
И ещё можно
[cc lang=”bash”]cat /etc/issue
Ubuntu 8.04.2 \n \l[/cc]
В случаи с редхадо подобными можно попробовать так
[cc lang=”bash”]# cat /proc/version
Linux version 2.6.24-23-server (buildd@palmer) (gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu3)) #1 SMP Wed Apr 1 22:22:14 UTC 2009[/cc]
Там зачастую говорят какой ршел стоит.