Multicraft: переадресация портов через туннель GRE
В течение прошлой недели я безуспешно пытался защитить сервер от атак DOS, используя туннель GRE от VPS до выделенной машины.
Визуальная:
User --> VPS --> Dedicated Server
Я следовал нескольким руководствам BUYVM и Minecraft DDOS Protection и модифицировал их по мере необходимости.
Что я сделал до сих пор:
На обеих машинах загружены следующие модули ядра
ip_gre
ip_nat_pptp
ip_conntrack_pptp
Кроме того, на обеих машинах включена переадресация портов ipv4.
Настройка GRE на выделенном компьютере:
ip tunnel add veridian mode gre remote VPS_EXTERN_IP local DEDICATED_EXTERN_IP ttl 255
ip link set veridian up
ip addr add 10.10.10.1/24 dev veridian
Это создает интерфейс:
veridian Link encap:UNSPEC HWaddr 3F-8D-F2-FA-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.1 P-t-P:10.10.10.1 Mask:255.255.255.0
inet6 addr: fe80::200:5efe:3f8d:f2fa/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:4016 errors:0 dropped:0 overruns:0 frame:0
TX packets:3970 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:338404 (338.4 KB) TX bytes:359357 (359.3 KB)
Настройка GRE на VPS
ip tunnel add gre1 mode gre remote DEDICATED_EXTERN_IP local VPS_EXTERN_IP ttl 255
ip link set gre1 up
ip addr add 10.10.10.2/24 dev gre1
Это создает интерфейс:
gre1 Link encap:UNSPEC HWaddr 68-83-98-C8-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.2 P-t-P:10.10.10.2 Mask:255.255.255.0
inet6 addr: fe80::200:5efe:6883:98c8/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:3743 errors:0 dropped:0 overruns:0 frame:0
TX packets:3811 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:314188 (314.1 KB) TX bytes:335587 (335.5 KB)
Добавление IP-интерфейса VPS в таблицу исходных маршрутов на выделенном сервере:
echo '100 VERIDIAN' >> /etc/iproute2/rt_tables
ip rule add from 10.10.10.0/24 table VERIDIAN
ip route add default via 10.10.10.2 table VERIDIAN
Что работает
Отсюда я могу успешно пропинговать выделенный сервер с VPS
ping 10.10.10.1
и наоборот
ping 10.10.10.2
Кроме того, когда я настраиваю запись NAT на VPS
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j SNAT --to-source VPS_EXTERN_IP
Я могу успешно получить внешний IP-адрес VPS с выделенного сервера, выполнив:
curl http://www.cpanel.net/showip.cgi --interface 10.10.10.1
Что не работает - переадресация портов
На VPS я сейчас запускаю:
iptables -t nat -A PREROUTING -p tcp -d VPS_EXTERN_IP --dport 25565 -j DNAT --to-destination 10.10.10.1:25565
iptables -A FORWARD -p tcp -d 10.10.10.1 --dport 25565 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Сейчас я пытаюсь подключиться к игровому серверу через внешний IP-адрес VPS, но безуспешно.
Я борюсь с этим больше недели, любая помощь будет высоко ценится.
Обновить
Все выше правильно.
Немного больше отладки, и я обнаружил, что демон-обёртка (Multicraft) для игрового сервера блокирует локальные соединения, когда для экземпляра игры установлен внешний ip.
Решение состоит в том, чтобы установить IP на 0.0.0.0, и переадресация портов работает отлично.
1 ответ
Поскольку я не вижу этого в показанной вами документации, я предполагаю, что вы забыли включить пересылку IP.
Выполните следующую команду, чтобы убедиться, что это действительно так:
sysctl net.ipv4.ip_forward
Если переадресация IP действительно отключена, вы должны увидеть:
net.ipv4.ip_forward = 0
Если это ваша проблема, запустите:
sysctl -w net.ipv4.ip_forward=1
Возможно, ваша проблема в том, что порты не открыты / брандмауэры блокируют порты.
Вы можете легко проверить это с вашего VPS на выделенную машину, используя nmap:
nmap -A 10.10.10.2/24 -p 25565
И с вашего клиентского компьютера на внешне доступный компьютер таким же образом, но заменить 10.10.10.2
с вашим внешним адресом VPS.