Подключение игровых серверов через туннель IPIP: руководство и решение проблем
В современных сетевых архитектурах использование виртуальных частных серверов (VPS) становится все более популярным, особенно в области игровых приложений. В этой статье мы рассмотрим процесс подключения игрового сервера и прокси-сервера через туннель IPIP, а также некоторые проблемы, которые могут возникнуть в процессе настройки.
Настройка туннеля между VPS
Я использую два VPS: один служит игровым сервером, а другой — прокси. Для соединения этих серверов я настроил туннель IPIP с использованием протокола Fou. Трафик теперь проходит через данный туннель, что обеспечивает дополнительную безопасность и возможность использования разных сетей в дальнейшем.
Для настройки туннеля на прокси-сервере я выполнил следующие команды:
firewall-cmd --add-interface=tunnel1 --zone=trusted --permanent
firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --zone=public --add-port=42011/udp --permanent
firewall-cmd --zone=public --add-port=16261-16262/udp --permanent
firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -p udp -i eth0 --dport 16261:16262 -j DNAT --to-destination 192.168.1.2
firewall-cmd --permanent --direct --add-rule ipv4 nat PREROUTING 0 -p tcp -i eth0 --dport 16261:16262 -j DNAT --to-destination 192.168.1.2
sysctl -w net.ipv4.ip_forward=1
modprobe fou
ip fou add port 42011 ipproto 4
modprobe ipip
ip link add name tunnel1 type ipip remote <remote VPS public IP> local <local VPS public IP> ttl 225 encap fou encap-sport 42011 encap-dport 42011
ip addr add 192.168.1.1/30 dev tunnel1
ip link set tunnel1 up
На игровом сервере я применил аналогичную конфигурацию, создав следующие правила:
firewall-cmd --add-interface=tunnel1 --zone=trusted --permanent
firewall-cmd --zone=public --add-port=42011/udp --permanent
firewall-cmd --zone=public --add-port=16261-16262/udp --permanent
firewall-cmd --permanent --direct --add-rule ipv4 mangle PREROUTING 0 -i eth0 -m conntrack --ctstate NEW -j MARK --set-mark 10
firewall-cmd --permanent --direct --add-rule ipv4 mangle PREROUTING 1 -m mark --mark 10 -j CONNMARK --save-mark
firewall-cmd --permanent --direct --add-rule ipv4 mangle OUTPUT 0 -j CONNMARK --restore-mark
ip route add default via <local VPS public gateway> dev eth0 proto static metric 100 table eth0
ip rule add to <remote VPS public IP>/32 table eth0
ip rule add fwmark 10 table eth0
modprobe fou
ip fou add port 42011 ipproto 4
modprobe ipip
ip link add name tunnel1 type ipip remote <remote VPS public IP> local <local VPS public IP> ttl 225 encap fou encap-sport 42011 encap-dport 42011
ip addr add 192.168.1.2/30 dev tunnel1
ip link set tunnel1 up
ip route delete default via <local VPS public gateway>
ip route add default via 192.168.1.2 dev tunnel1 metric 100
Проблемы с UDP-трафиком
Несмотря на корректную настройку, у меня возникла проблема: UDP-трафик выходил из интерфейса tunnel1 вместо eth0, как это предполагалось согласно правилам IP. После выполнения команды для проверки соединений было замечено, что клиент UDP успешно получает сигнал, и он помечается как 10, однако это не решает проблему с маршрутизацией.
Для проверки текущих правил IP на игровом сервере я использовал следующую команду:
ip rule
Вот текущие правила, которые отображаются:
0: from all lookup local
32761: from all fwmark 0xa lookup eth0
32762: from 192.168.1.2 lookup tunnel1
32764: from all to <proxy public ip> lookup eth0
32766: from all lookup main
32767: from all lookup default
Tcp и UDP: различия в обработке
Одна из особенностей, с которой я столкнулся, заключается в том, что проблема с маршрутизацией касалась только UDP-трафика, в то время как TCP-трафик обрабатывался без проблем. Я также заметил, что при изменении правил для других протоколов, таких как ICMP, они работали должным образом, в то время как аналогичные изменения для UDP не оказали никакого эффекта.
В заключение
Сетевые настройки, особенно при использовании виртуальных серверов и туннелей, могут быть сложными. Важно тщательно следить за конфигурацией правил и учитывать особенности работы различных протоколов. Если у вас возникают подобные проблемы, стоит обратить внимание на используемые правила и методы обработки UDP-трафика, так как они могут отличаться от TCP.