我正在使用 linode.com,他们提供了为每个 vps 分配私有 IP 的功能。我想做的是设置每个节点的防火墙以允许网络上其他节点的访问,但似乎没有取得太大成功。
例如,我尝试允许从 server2 访问 server1:1337,两者的设置如下:
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"
server1 上的 IPTables 规则集:
#-----
# 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,但仍然无法连接。
答案1
感谢评论的建议和来自 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 作为负载均衡器,并且它使用 server2 dns 条目,我认为它默认为公共 ip,它不是 iptables 规则集的一部分,也不应该是,否则我必须输入私有网络上的每个 ip 以允许访问端口 1337。然而,这个问题是另一个问题,因为 OP 已经解决了。
- 更新 -
更新此答案,以防将来有人偶然发现它。我选择采用此解决方案; DNS 隐身。通过为我的其中一台 VPS 添加 DNS 功能,我可以添加所有内部 IP 和外部 IP,这样我的所有内部 iptable 配置都应该按预期工作,同时仍然允许通过其公共 IP 对任何 VPS 进行远程访问。