Игровой сервер для sudden-strike

Раздел посвящён игровым серверам и игрушкам вообще.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
zarathustra
проходил мимо
Сообщения: 3
Зарегистрирован: 2013-01-26 12:14:57
Откуда: СССР
Контактная информация:

Игровой сервер для sudden-strike

Непрочитанное сообщение zarathustra » 2017-09-12 10:37:16

Небольшая вводная:
Команда существует уже около 20 лет и занимается некоммерческой разработкой мода на базе SSRW. Игрушка старая и в мульти использовали Hamachi. Однако с этого года цена на подсеть у них стала совсем дурная, а мы все (домены, хостинг, рекламу и пр.) оплачиваем из своего кармана. Учитывая, что команда несколько лет как уже имеет свой сервер, решение напрашивалось однозначное.

На данны момент имеется канал 50 Mb, за роутером:
основной сервер: FreeBSD 10.3, DNS, DHCP, ftp, ntp, Samba, VPN.
резервный: FreeBSD 10.3, ftp, VPN. (т.е. имеется возможность безболезненно тренироваться "на кошках")
Несколько человек подключается по vpn и благополучно работает с файлами не первый год (сразу для ясности: мои отношение с unx на уровне - возникла задача => читаю/разбираюсь => делаю => до следующей задачи). Казалось - сложностей быть не должно
Ядро собрано с опциями:

Код: Выделить всё

# IPFW
options         IPFIREWALL
options         IPFIREWALL_NAT
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=5
options         IPDIVERT
options         DUMMYNET
options         LIBALIAS
options         ROUTETABLES=2
options         HZ="1000"
options         SC_DISABLE_REBOOT
# NETGRAPH
options         NETGRAPH
options         NETGRAPH_ETHER
options         NETGRAPH_SOCKET
options         NETGRAPH_TEE
options         NETGRAPH_MPPC_ENCRYPTION
options         NETGRAPH_MPPC_COMPRESSION
options         NETGRAPH_BPF
options         NETGRAPH_IFACE
options         NETGRAPH_KSOCKET
options         NETGRAPH_PPP
options         NETGRAPH_PPTPGRE
options         NETGRAPH_TCPMSS
options         NETGRAPH_VJC
options         NETGRAPH_ONE2MANY
options         NETGRAPH_RFC1490
options         NETGRAPH_TTY
options         NETGRAPH_UI
# IpSec
options         IPSEC
options         IPSEC_FILTERTUNNEL
options         IPSEC_NAT_T
options         IPSEC_DEBUG
device          crypto
device          enc

rc.conf

Код: Выделить всё

hostname="srv3.xxxx.local"
ifconfig_em0="inet 192.168.1.251 netmask 255.255.255.0 media 1000baseT mediaopt full-duplex"
defaultrouter="192.168.1.252"
local_unbound_enable="YES"
sshd_enable="YES"
ntpd_enable="YES"
ntpd_sync_on_start="YES"
powerd_enable="YES"
dumpdev="AUTO"
fsck_y_enable="YES"
background_fsck="NO"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
keymap="ru.koi8-r"
scrnmap="koi8-r2cp866"
dhcpd_enable="YES"
dhcpd_ifaces="em0"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_withumask="022"
ftpd_enable="YES"
ftpd_flags="-4 -D -h -l -l -r"
samba_server_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
gateway_enable="YES"
mpd_enable="YES"
mpd_flags="-b"
log_in_vain="YES"
syslogd_enable="YES"
inetd_enable="NO"
smartd_enable="YES"

Для разделения всех членов команды перевел на L2TP. Правда, нахрапом настроить IpSec не получилось, но это я потом прикручу.
mpd.conf

Код: Выделить всё

startup:
        log -all +auth
        set user xxxx xxxxxxxx admin
        set user xxxx xxxxxxxx admin
        set user xxxx xxxxxxxx admin
        set user xxxx xxxxxxxx admin
        set web self 0.0.0.0 5006
        set web open
       
default:
        load pptp_server
        load l2tp_server
       
pptp_server:
        set ippool add rwg-tow 10.2.2.11 10.2.2.250
        create bundle template B
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set iface enable nat
        set iface enable netflow-in
        set iface enable netflow-out
        set ipcp yes vjcomp
        set ipcp ranges 10.2.2.1/24 ippool rwg-tow
        set ipcp dns 10.2.2.1
        set ipcp nbns 10.2.2.1
        set bundle enable compression
        set ccp yes pred1 deflate mppc
        set mppc yes compress e40 e56 e128 stateless
        create link template L pptp
        set link enable multilink
        set link yes acfcomp protocomp
        set link action bundle B
        set link no pap chap eap
        set link enable chap chap-msv1 chap-msv2
        set link mtu 1460
        set link keep-alive 60 180
        set pptp self 192.168.1.251
        set link enable incoming

l2tp_server:
        set ippool add pool2 192.168.1.150 192.168.1.199
        create bundle template C
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp yes vjcomp
        set ipcp ranges 192.168.1.251/32 ippool pool2
        set ipcp dns XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX
        set ipcp nbns 192.168.1.251
        set ccp yes pred1 deflate mppc
        set mppc yes e40 e56 e128 stateless
        create link template N l2tp
        set link action bundle C
        set link enable multilink
        set link yes acfcomp protocomp
        set link no pap chap
        set link enable chap chap-msv1 chap-msv2
        set link mtu 1460
        set link keep-alive 60 180
        set l2tp self 192.168.1.251
        set l2tp hostname srv3.xxxx.local
        set link enable incoming

mpd.secret

Код: Выделить всё

User1        xxxxxxxxxx        192.168.1.199
xxxx2        xxxxxxxxxx        192.168.1.198
xxxx3        xxxxxxxxxx        192.168.1.197
xxxx4        xxxxxxxxxx        192.168.1.196
xxxx5        xxxxxxxxxx        192.168.1.194
xxxx6        xxxxxxxxxx        192.168.1.193
xxxx7        xxxxxxxxxx        192.168.1.192
xxxx8        xxxxxxxxxx        192.168.1.191
xxxx9        xxxxxxxxxx        192.168.1.190
xxxx0        xxxxxxxxxx        192.168.1.188
xxxxX        xxxxxxxxxx        192.168.1.187
xxxx1        xxxxxxxxxx        10.2.2.2
xxxx2        xxxxxxxxxx        10.2.2.3
xxxx3        xxxxxxxxxx        10.2.2.4
Gamer       Gamer              *

Поскольку (как выяснилось) у многих возникают проблемы с настройкой, было решено использовать CMAK: помимо возможности добавлять маршруты ещё и "подтягивает" список серверов с внешнего ресурса (что называется, на вырост).

На этом все хорошее и заканчивается:
Игра, как правило, не видит созданный одним из игроков сервер или видит, но не подключается.
Пляски с маршрутами и/или метриками иногда! решают проблему, но это не выход.
Sudden strike использует порты:

Код: Выделить всё

TCP 2300 (2300-2400)
TCP 3389
TCP 6073
TCP 28800 (28800-28900)
TCP 47624
UDP 1900
UDP 2350
UDP 47624

ipfw.rules

Код: Выделить всё

ipfw -q -f flush
cmd="ipfw -q add"
ks="keep-state"
lif="em0"
lip="192.168.1.251"
lan="192.168.1.0/24"
gate="192.168.1.252"
vpn="10.2.2.0/24"
iip="XXX.XXX.XXX.XXX"
dns="XXX.XXX.XXX.XXX,XXX.XXX.XXX.XXX"
$cmd 00005 allow ip from any to any via lo0
$cmd 00010 check-state
# $cmd 00100 deny ip from any to 127.0.0.0/8
# $cmd 00110 deny ip from 127.0.0.0/8 to any
# $cmd 00120 reject log tcp from any to any tcpflags fin, syn, rst, psh, ack, urg via $lif
# $cmd 00130 reject log tcp from any to any tcpflags !fin, !syn, !rst, !psh, !ack, !urg via $lif
# $cmd 00140 reject log tcp from any to any not established tcpflags fin via $lif
# $cmd 00150 deny log ip from any to any not verrevpath in via $lif
# $cmd 00160 deny log all from any to any frag in via $lif
# ban="table(1)"
# ipfw table 1 flush
# ipfw table 1 add 93.153.142.102
# $cmd 00170 deny log all from any to ${ban}
# $cmd 00190 deny log all from ${ban} to any
$cmd 00200 allow tcp from any to any established
$cmd 01000 allow tcp from any to me 11022 via $lif setup $ks
$cmd 01010 allow tcp from any to me 20,21 setup $ks
$cmd 01020 allow udp from any to $dns 53 out via $lif $ks
$cmd 01030 allow all from $lan to $lip 43,53,81,137-139,445 via $lif setup $ks
$cmd 01035 allow all from $lan to $lip 81,137-139,445 via ng* setup $ks
$cmd 01036 allow udp from $lan to me 53,137-139,445 via ng* $ks
$cmd 01040 allow udp from me to any 37,123 via $lif $ks
$cmd 01045 allow udp from $lan to me 37,53,123 via $lif $ks
$cmd 01050 allow tcp from $lan to $lip 43,53 via $lif $ks
$cmd 01060 allow udp from $lan to $lan 1900 via $lif $ks
$cmd 01070 allow icmp from $lan to any via $lif
$cmd 01100 allow udp from $gate to any 520,1025 via $lif $ks
$cmd 02000 allow tcp from any to me 1701,1723,5006 setup $ks
$cmd 02010 allow gre from any to me via $lif $ks
$cmd 02020 allow gre from any to me via ng* $ks
$cmd 02030 allow gre from $vpn to $vpn via ng* $ks
$cmd 02100 allow udp from any to me 1701 $ks
$cmd 65000 allow log all from any to any

Пробовал и совсем все открывать (благо, роутер защищает).
Не знаю, что еще может быть завязано.
Собственно, прошу ткнуть носом: где у меня руки не оттуда растут? :oops:
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)

Neus
капитан
Сообщения: 1718
Зарегистрирован: 2008-09-08 21:59:56

Игровой сервер для sudden-strike

Непрочитанное сообщение Neus » 2017-09-12 11:24:33

Я правильно распарсил ваш конфиг - у вас клиент впн получает адрес 192.168.1.х/32?
Тогда в этом и проблема - чтобы контра увидела сервер не зная адреса, они (игроки в вашем случае) должны быть в одной подсети.
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

zarathustra
проходил мимо
Сообщения: 3
Зарегистрирован: 2013-01-26 12:14:57
Откуда: СССР
Контактная информация:

Игровой сервер для sudden-strike

Непрочитанное сообщение zarathustra » 2017-09-12 13:13:58

Не совсем так:
адреса 192.168.1.х/32 выдаются клиентам команды (L2TP) для работы с сервером и тут проблем нет - все работает как надо.
Игрокам (PPTP) выдаются адреса 10.2.2.x/32 и им наоборот (по хорошему) нужно закрыть доступ к серверу - там конечно и так особо ничего не наломаешь, но мало ли.
+ не контра, а Sudden strike (у нас известна так же как "Противостояние") - там сервер создается одним из игроков и только на эту (одну) игру - т.е. игровой сервер в привычном понимании там вообще не нужен, им может быть любой хост. Сервер же нужен только для объединения игроков в рамках одной сети. А не видят, очевидно, из-за проблем с broadcast - обнаружение сервера идет именно так.
В обычной локалке с этим нет проблем - там и маска обычно 255.255.255.0, а vpn-сервер выдает клиентам 255.255.255.255 - что логично, т.к. точка-точка.
Словом, задача открыть для клиентов все (включая broadcast) внутри "игровой" подсети - 10.2.2.x/32
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)

Neus
капитан
Сообщения: 1718
Зарегистрирован: 2008-09-08 21:59:56

Игровой сервер для sudden-strike

Непрочитанное сообщение Neus » 2017-09-13 1:29:14

Словом, задача открыть для клиентов все (включая broadcast) внутри "игровой" подсети - 10.2.2.x/32

Так это как бы не подсеть, у неё нету ни адреса сети ни адреса broadcast. Куда запрос слать то?
Нельзя открыть то, чего нет :)
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн

zarathustra
проходил мимо
Сообщения: 3
Зарегистрирован: 2013-01-26 12:14:57
Откуда: СССР
Контактная информация:

Игровой сервер для sudden-strike

Непрочитанное сообщение zarathustra » 2017-09-13 10:57:49

Neus писал(а):Источник цитаты Так это как бы не подсеть, у неё нету ни адреса сети ни адреса broadcast. Куда запрос слать то?
Да, но адрес сервера (10.2.2.1) прописан в mpd.conf ?
Neus писал(а):Источник цитаты Нельзя открыть то, чего нет
Хорошо, а если на сервере создать vlan? Или еще проще: у меня там незадействованная сетевая есть + (наверное) можно и через dhcp тот же шлюз или маршрут раздавать? Это может как-то помочь в решении проблемы?
Просто не настолько хорошо разбираюсь в вопросе, а тут еще и связка такая unix/vpn/сеть ?
РС Если я правильно понимаю, мне надо обеспечить доступность клиентов PPTP между собой и прохождение broadcast для них в сети 10.2.2.x/24 ?
Наверное, еще могут быть какие-то проблемы с приоритетами в маршрутах на машинах клиентов.
Изображение
Приумножая познания, приумножаешь и скорбь.....(с)

Neus
капитан
Сообщения: 1718
Зарегистрирован: 2008-09-08 21:59:56

Игровой сервер для sudden-strike

Непрочитанное сообщение Neus » 2017-09-13 17:00:51

Ну да, у "геймеров" должна быть одна подсеть и файрвол не должен резать броадкаст.

Отправлено спустя 7 минут 3 секунды:
Вот примерно так http://itadept.ru/freebsd-mpd5-server/#firewall
«Вы никогда не сумеете решить возникшую проблему,
если сохраните то же мышление и тот же подход,
который привёл вас к этой проблеме.»
© Альберт Эйнштейн


Вернуться в «Игры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей