Ru-Board.club
← Вернуться в раздел «UNIX»

» Два провайдера на одном сервере

Автор: LikMigTel
Дата сообщения: 05.02.2012 20:00
У меня игровой сервер.
К серверу подключено два провайдера.
Debian Linux 5.0

Это физический железный сервак, который прямо смотрит в обе сети провайдеров, на нем нет ничего кроме
нескольких игровых серверов Counter-Strike 1.6 и team-fortress2

Как настроить маршрутизацию, или что сделать в IPTABLES
Чтобы на сервер можно было зайти по любому из двух IP?

т.е. чтобы с одного и того же IP клиента можно было подключиться как к первому IP Сервера, так и ко второму, и чтобы не было разницы между тем к какому из IP подключается клиент. (естественно речь не про пинг)



# The loopback network interface
auto lo
iface lo inet loopback
post-up iptables-restore < /etc/iptables.rules

# The primary network interface
allow-hotplug eth2
iface eth2 inet dhcp

allow-hotplug eth0
iface eth0 inet static
address xx.xx.xx.xx
netmask xxx.xxx.xxx.xxx


Как вариант могу купить и поставить RB450G перед этим сервером, но будет ли тот результат?
СЛышал что можно обойтись без аппаратного решения, просто с помощью IPTABLES
Автор: tankistua
Дата сообщения: 05.02.2012 22:01
Строил только на фре - там это решается фаерволом.

Здесь нужен айпироут

http://habrahabr.ru/blogs/linux/49137/
http://habrahabr.ru/blogs/linux/55132/
Автор: Alukardd
Дата сообщения: 05.02.2012 23:41
LikMigTel
рекомендую к прочтению LARTC - вот нужный вам кусок на русском.

Вернее сказать это (LARTC) считается оф докой к утилите ip (часть пакета iproute2), так что это не мои прихоти

tankistua
Цитата:
Здесь нужен айпироут
вы так это с тяжестью говорите - будто iproute чем-то не подходит для Linux, он между прочем часть ядра с 2.2 версии...
Автор: LikMigTel
Дата сообщения: 06.02.2012 07:50
Дополню данные:
- у меня две сетевухи смотрящие прямо в инет и на каждой ВНЕШНИЙ IP
- у меня нет третьей локальной сетевухи и мой сервер не шлюз


IP1 внешний<--------------------------->как локальные так и внешние
IP2 внешний<--------------------------->как локальные так и внешние


на оба интерфейса юзеры заходят как с локальными так и с внешними IP
более того внутренние подсети у провайдеров пересекаются - имеют одинаковые сегменты.

скажем от обоих ко мне может зайти игрок с IP адресом 10.10.10.10


следовательно вот на этом моменте все стопорится:

2. Наконец, $P1_NET это IP сеть, к которой принадлежит $P1 , а $P2_NET -- сеть, к которой принадлежит $P2


потому как НЕТУ У МЕНЯ ЧЕТКОГО ДИАПАЗОНА КАЖДОЙ ИЗ СЕТЕЙ
- они как внутренние так и внещние, они пересекаются.

мне банально нужно сделать элементарное:

1. чтобы игрок мог зайти по любому интерфейсу
2. чтоб обмен пакетами с игроком шел через тот интерфейс через который он зашел.
- даже порты выделять не надо!
тупо: все что пришло на сетевуху 1 обменивается данными с сервером через нее же
все что пришло на сетевуху 2 обменивается данными с сервером через нее же

и чтобы не было маршрутов, которые бы определяли что сетевуха 1 только для такого-то диапазона,
а сетевуха два только для другого диапазона.

любая сетевуха для любого входящего соединения

по логике тут прописей должно быть на 10 строчек от силы
настолько простая эта схема







Добавлено:
http://habrahabr.ru/blogs/linux/49137/

Начал делать по этому ману в итоге:

nano /etc/routes.sh



IF1=eth2 #(дефолтный первый интерфейс)
IF2=eth0 #(второй интерфейс)
IP1=78.30.248.244
IP2=91.200.47.201
P1=78.30.232.1
P2=91.200.47.193
SRV11=192.168.0.11
SRV12=192.168.0.12

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1

ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2


ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
ip route add default via $P1 metric 10


ip rule add from $IP1 table T1
ip rule add from $IP2 table T2

ip rule add from $SRV11 fwmark 10 table T1
ip rule add from $SRV12 fwmark 20 table T2


./routes.sh
ругается так:

Error: argument "T1" is wrong: "table" value is invalid

Error: argument "T1" is wrong: "table" value is invalid

Error: argument "T2" is wrong: "table" value is invalid

Error: argument "T2" is wrong: "table" value is invalid

RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists
Error: argument "T1" is wrong: invalid table ID

Error: argument "T2" is wrong: invalid table ID

Error: argument "T1" is wrong: invalid table ID

Error: argument "T2" is wrong: invalid table ID


Добавлено:
та же хрень, дошел вот до этого момента:

LOCAL_ETH=eth0
GLOBAL_ETH_P1=eth1
GLOBAL_ETH_P2=eth2
LOCAL_IP=192.168.0.1
LOCAL_NET=192.168.0.0/24
GLOBAL_IP_P1=10.10.10.10
GLOBAL_IP_P2=20.20.20.20



и - НУ НЕТУ У МЕНЯ LOCAL_ETH

и че мне делать?
ЭТ НЕ ШЛЮЗ А СЕРВЕР
Автор: tankistua
Дата сообщения: 06.02.2012 23:00

Цитата:
вы так это с тяжестью говорите - будто iproute чем-то не подходит для Linux, он между прочем часть ядра с 2.2 версии...


да для меня давно уже что на линуксе - то тяжесть Примерно как для линуксоида винда


Так там ошибка в статье - поправь.


Цитата:
и - НУ НЕТУ У МЕНЯ LOCAL_ETH

ну так не пиши его - делов-то.

Тут самый главный смысл пакет промаркировать да и отправить обратно в интерфейс, с которого он прилетел.
Автор: Alukardd
Дата сообщения: 06.02.2012 23:26
LikMigTel
Цитата:
Error: argument "T1" is wrong: invalid table ID
так таблицы T1 и T2 создать надо
Цитата:
Создадим две дополнительные таблицы маршрутизации, скажем T1 и T2. Добавим их в файл /etc/iproute2/rt_tables. Теперь можно настроить эти таблицы следующими командами:
Автор: LikMigTel
Дата сообщения: 07.02.2012 07:41
Таk в том то и дело, что нельзя мне этого делать.
Любой игрок должн заходить по любому IP
а если я сделаю эти маршруты то им будет доступен только 1 IP

или не так?
пожалуйста объясните мне на пальцах принцип этот, а то я походу не понимаю:
пакет пришел на IP1 дальше он перекинулся туда, а ушел оттуда, вот так как то))


Автор: tankistua
Дата сообщения: 07.02.2012 20:40
ну я б с удовольствием помог - да даже тестировать негде - везде фря стоит, на фре делается такое очень просто

pass in quick on $inet_iface reply-to ($inet_iface $inet_gw) proto tcp from <TRUSTED-HOSTS> to $inet_ip port ssh
pass in quick on $binet_iface reply-to ($binet_iface $binet_gw) proto tcp from <TRUSTED-HOSTS> to $binet_ip port ssh


и все.

Добавлено:
#!/bin/sh
IP1=217.111.111.99
IP2=94.11.111.81
P1=217.111.111.97
P2=94.11.111.82

# добавим дефаулт гетвей в каждую таблицу.
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

#Это так на всякий случай
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

Добавлено:
#!/bin/sh
IP1=192.168.4.1
IP2=217.1.1.2
P1=192.168.4.2
P2=217.1.1.1
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
Автор: Alukardd
Дата сообщения: 07.02.2012 22:46
LikMigTel
Если на пальцах смысл настроек заключается в следующем:
у сервера есть gateway он один (давайте для простоты абстрагируемся от возможности использования 2-х - у вас скорее всего один и настроен) - через него сервер ходит в инет. (условимся его называть провайдер1 = П1, другой соответственно будет П2)
Теперь у вас есть 2 провайдера и 2 разных внешних ip адреса. Так вот что происходит когда клиент стучится через внешний ip адрес П2 - серверу приходит пакет от некого клиента он его обрабатывает и хочет послать ответ, маршрут для ответы выбирается исходя из его таблицы маршрутизации, а она велит ему слать ответ через шлюз по умолчанию (т.е. через П1) - так ответный пакет сможет идти до ближайшего NAT'ящего устройства, которое этот пакет и поглотит, т.к. оно просто не будет знать куда его слать дальше - ведь изначальный пакет прошёл не через него!
Если в двух словах - то ответ просто не дойдёт до вопрошающего через П2 провайдера.
Так вот!!! Эти манипуляции с iproute2 позволяют (опачки читаем что написано первой же строчкой по моей ссылке)
Цитата:
вопрос заключается в том, как организовать маршрутизацию таким образом, чтобы ответы на запросы, приходящие через определенного провайдера, скажем ровайдера 1, уходили через того же провайдера.
А зачем это? Читаем то что я только что изложил.
Автор: LikMigTel
Дата сообщения: 08.02.2012 10:41
Про гейтвеи я немного вкурил.
/etc/network/interfaces
тот гейтвей который прописан первым или который по DHCP получается раньше - становится дефолтным
второй в потерях.

еще вопрос:
чтобы любой игрок мог зайти и по одному и по второму интерфейсу на свой выбор и поиметь разный пинг до сервера надо обязательно маркировать пакеты?

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

что в этих таблицах? можно на пальцах, ссори за нубство )

и еще
есть вариант купить RB450G
вставить в него два провайдера (сделать 2 ван порта) и 1 лан порт воткнуть в сервак

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




Цитата:
Создадим две дополнительные таблицы маршрутизации, скажем T1 и T2. Добавим их в файл /etc/iproute2/rt_tables.


а какого формата записи должны быть в этих таблицах? и что там вообще должно быть?
Автор: Alukardd
Дата сообщения: 08.02.2012 16:58
LikMigTel
Просто по аналогии с выше стоящими сделайте. В файле описаны только таблицы. Соответственно номер ставите какой-нить 5 и второй 6 и имена T1 и T2 (имена можете изменить на более красивые).

Про вариант купить железку - я бы не стал. Зачем оно лишнее железо?

Цитата:
чтобы любой игрок мог зайти и по одному и по второму интерфейсу на свой выбор и поиметь разный пинг до сервера надо обязательно маркировать пакеты?
 
потому как я подозреваю что если речь идет о таблицах маршрутизации, то тогда
второй интерфейс будет доступен только для тех кто прописан в маршрутах, а для всех остальных нет, так?
все манипуляции которые описаны в том разделе LARTC, что я вам показал касаются только входящих пакетов, что бы откуда пришёл туда и ушел это вам и надо! У меня от работы мозг же лопается, а тут еще вы по 3 разу одно и тоже спрашиваете
Автор: LikMigTel
Дата сообщения: 09.02.2012 08:44
делаю скрипт:

Цитата:

IF1=eth2
IF2=eth0
IP1=78.30.248.244
IP2=91.200.47.203
P1=78.30.232.1
P2=91.200.47.193
P1_NET=78.30.192.0/18
P2_NET=91.200.47.192/27


ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

ip route add default via $P1

ip rule add from $IP1 table T1
ip rule add from $IP2 table T2


таблицы прописал так:
/etc/iproute2/rt_tables

Цитата:

#
# reserved values
#
255 local
254 main
253 default
0 unspec
5 T1
6 T2

#
# local
#
#1 inr.ruhep



ругается так

Цитата:

csmania:~# ./script.sh
RTNETLINK answers: Invalid argument
RTNETLINK answers: File exists
RTNETLINK answers: Invalid argument
RTNETLINK answers: File exists




P1_NET=78.30.192.0/18
P2_NET=91.200.47.192/27
брал отсюда:


Цитата:

csmania:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
91.200.47.192 * 255.255.255.224 U 0 0 0 eth0
78.30.192.0 * 255.255.192.0 U 0 0 0 eth2
default gate.sevstar.ne 0.0.0.0 UG 0 0 0 eth2


/etc/network/interfaces

Цитата:

# The loopback network interface
auto lo
iface lo inet loopback
post-up iptables-restore < /etc/iptables.rules

# The primary network interface
allow-hotplug eth2
iface eth2 inet static
address 78.30.248.244
netmask 255.255.192.0
gateway 78.30.232.1

allow-hotplug eth0
iface eth0 inet static
address 91.200.47.201
netmask 255.255.255.224
#gateway 91.200.47.193



где я недопетрил?
Автор: LikMigTel
Дата сообщения: 15.02.2012 07:47
помогите пожалуйста.
Автор: Alukardd
Дата сообщения: 15.02.2012 19:35
LikMigTel
думается мне что он ругается ,т.к. маршруты вы эти в ходе ваших изысканий уже не раз туда добавили, соответственно 2-ой раз он сделать это не может...
При всём этом у вас вроде как всё должно работать.

Страницы: 1

Предыдущая тема: Обработка данных


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.