Я использую linode.com, и они предоставляют возможность назначать частный IP-адрес каждому vps. Я пытаюсь настроить брандмауэр каждого узла, чтобы разрешить доступ с других узлов в сети, но, похоже, у меня нет особого успеха.
Например, я пытаюсь разрешить доступ к server1: 1337 с server2, оба настроены следующим образом:
server1:
ifcfg-eth0:
DEVICE="eth0"
IPADDR="1.1.1.1"
NETMASK="255.255.255.0"
ifcfg-eth0:0:
DEVICE="eth0:0"
IPADDR="192.168.132.96"
NETMASK="255.255.128.0"
server2:
ifcfg-eth0:
DEVICE="eth0"
IPADDR="1.1.1.2"
NETMASK="255.255.255.0"
ifcfg-eth0:0:
DEVICE="eth0:0"
IPADDR="192.168.132.97"
NETMASK="255.255.128.0"
И набор правил IPTables на server1:
#-----
# Flush all current rules from iptables#
#-----
iptables -F
iptables -F -t nat
#-----
#-----
# Set access for localhost
#-----
iptables -A INPUT -i lo -j ACCEPT
# !! Tried to allow all nodes on the subnet access to everything, but still didn't work !!
iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT
#-----
#-----
# Accept packets belonging to established and related connections
#-----
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#-----
# !! Tried to allow access to the port directly !!
iptables -A INPUT -i eth0:0 -p tcp -s 192.168.132.0/17 --dport 1337 -j ACCEPT
#-----
# Lock everything down
#-----
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#-----
Я наткнулся на пару старых форумов, в которых говорилось, что iptables не может использовать -i eth0:0
позвоните, поскольку виртуальные настройки имеют общие родительские настройки, но я не смог полностью подтвердить это.
--Редактировать--
Я также добавил частную подсеть (192.168.132.0/17) к server2, но все еще не могу заставить ее подключиться.
Благодаря предложениям из комментариев и некоторой информации от техподдержки linode мне удалось решить проблему с подключением.
Чтобы решить эту проблему, мне нужно было убедиться, что и server1, и server2 имеют правильные записи частной подсети для iptables:
iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT
Сделав эту запись на обоих серверах, я мог затем telnet на server2: 1337 (с server1) и контролировать байты / пакеты через iptables и видеть, что действительно пакеты принимаются:
$ -> telnet 192.168.132.97 1337
Trying 192.168.132.97...
Connected to 192.168.132.97.
Escape character is '^]'.
$ -> iptables -L -vn
Chain INPUT (policy DROP 337 packets, 18695 bytes)
pkts bytes target prot opt in out source destination
56 30019 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
53 40539 ACCEPT all -- * * 192.168.128.0/17 0.0.0.0/0
Теперь проблема в том, что я использую nginx в качестве балансировщика нагрузки, и он использовал запись dns server2, которая, как я предполагаю, по умолчанию является общедоступным IP-адресом, который не является частью набора правил iptables и не должен быть, иначе мне нужно ввести в каждом IP-адресе частной сети, чтобы разрешить доступ к порту 1337. Однако эта проблема является другим вопросом, так как OP был решен.
-- Обновить --
Обновление этого ответа на случай, если кто-то еще наткнется на него в будущем. Я выбрал это решение; DNS Stealth. Добавив возможность DNS к одному из моих VPS, я могу добавить все внутренние IP-адреса и внешние IP-адреса, поэтому все мои внутренние конфигурации iptable должны работать должным образом, при этом разрешая удаленный доступ к любому из vps через их общедоступный IP-адрес.