При подключении удаленного сервера к моему экземпляру Redis на другом сервере появляется ошибка "Нет маршрута к хосту".

Redis определенно работает и слушает порт 6379. Я могу подключиться к нему локально.

На сервере с Redis это настроено для iptables -S

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N FORWARD_IN_ZONES
-N FORWARD_IN_ZONES_SOURCE
-N FORWARD_OUT_ZONES
-N FORWARD_OUT_ZONES_SOURCE
-N FORWARD_direct
-N FWDI_public
-N FWDI_public_allow
-N FWDI_public_deny
-N FWDI_public_log
-N FWDO_public
-N FWDO_public_allow
-N FWDO_public_deny
-N FWDO_public_log
-N INPUT_ZONES
-N INPUT_ZONES_SOURCE
-N INPUT_direct
-N IN_public
-N IN_public_allow
-N IN_public_deny
-N IN_public_log
-N OUTPUT_direct
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ACCEPT
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A INPUT_ZONES -g IN_public
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

netstat -rn распечатывает:

0.0.0.0         178.xxx.xxx.1   0.0.0.0         UG        0 0          0 eth0
10.10.0.0       0.0.0.0         255.255.0.0     U         0 0          0 eth0
10.136.0.0      0.0.0.0         255.255.0.0     U         0 0          0 eth1
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
172.18.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-e071bb9e15A
178.xxx.xxx.0   0.0.0.0         255.255.240.0   U         0 0          0 eth0

Здесь что-то неправильно настроено, и как я могу это исправить, чтобы удаленные серверы могли подключаться к порту 6379?

1 ответ1

0

Исходя из названий цепочек, ваша конфигурация использует firewalld который использует iptables качестве бэкэнда и генерирует правила iptables из своей собственной конфигурации. Redhat предоставляет много документации для его использования. Для вашего случая предоставление доступа должно быть сделано с:

firewall-cmd --add-port=6379/tcp

Вероятно, это будет отражено в правилах iptables :

# iptables -S -t filter | grep -w 6379
-A IN_public_allow -p tcp -m tcp --dport 6379 -m conntrack --ctstate NEW -j ACCEPT

Это предоставит временно доступ к redis, работающему на хосте. Если вы считаете, что допустили ошибку, вы можете восстановить конфигурацию с помощью:

firewall-cmd --reload

После получения результатов вы можете снова запустить тот же комментарий с дополнительным параметром --permanent чтобы записать конфигурацию вместо изменения правил, например, для постоянной настройки:

firewall-cmd --permanent --add-port=6379/tcp

В дальнейшем вам всегда нужны две команды для постоянного изменения: одна для конфигурации, одна для запущенного брандмауэра (firewall-cmd --reload после firewall-cmd --permanent ... достаточно хорош).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .