我搜索了又搜索,尝试了几种不同的方法,但还是无法找到解决方案。
我的情况如下:
节点1有2个接口:eth0(公共 IP:56.XXX),以及eth1(私有 IP:10.XXX)
节点2有2个接口:eth0(公共 IP:56.XXX),以及eth1(私有 IP:10.XXX)
每个节点都运行 Ubuntu 10.04 LTS
从此设置节点1和节点2每个节点都可以访问互联网,而且还可以经由 LAN 私下互相连接。
我想要实现的是节点1成为一个防火墙和代理服务器为了节点2以及我稍后将部署的许多其他节点。节点1将只能访问互联网,因为我将禁用eth0在节点2以便节点2只能访问其私有网络上的任何内容。
简单来说,我怎样才能转发万维网请求进入节点1以及eth0并转发至节点2使用eth1尽管节点2将作为该请求的网络服务器吗?
按照以下示例操作后,这是我的 iptables -L:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere 10.182.43.193 state NEW tcp dpt:www
ACCEPT tcp -- anywhere 10.182.43.193 state NEW tcp dpt:https
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
这是我的 iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT all -- anywhere firewall to:10.182.43.193
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
答案1
我将指定一些任意 IP 地址以使其更清楚。替换成您的真实地址。
节点 1 eth0:56.0.0.1 节点 1 eth1:10.0.0.1 节点 2 eth0:56.0.0.2 节点 2 eth1:10.0.0.2
如果 node1 是你的网关/防火墙机器,你需要运行iptables处理 NAT/转发。
# iptables config on node1
# set up a destination nat from 56.0.0.2 to 10.0.0.2
iptables -t nat -A PREROUTING -d 56.0.0.2 -j DNAT --to-destination 10.0.0.2
# open port 80/443
iptables -A INPUT -d 10.0.0.2 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -d 10.0.0.2 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
# related/established traffic
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
您不需要配置 node2 上的 eth0。相反,您需要在 node1 上配置 56.0.0.2 IP 地址,以便唯一地使用它来映射到 node2。
答案2
如果节点 2 应该有自己的 IP 地址,则您不需要端口转发,而是需要代理 ARP 和路由。
在 node2 上禁用 eth0 并将公共 IP 添加到任何其他接口,例如:
ip addr add 56.0.0.2/32 dev eth1
在 node1 上通过 eth1 设置到 node2 的路由:
ip route add 56.0.0.2 dev eth1
并在 eth0 上启用代理 ARP 响应(因此 node1 将回答 node2 的 ARP 请求):
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
这将使所有到节点 2 的流量都经过节点 1。然后您可以设置 iptables 规则来限制它,就像任何其他转发流量一样。这不会执行任何应用程序级代理,但您仍然可以使用 iptables 规则实现这一点。
永久设置这些通常取决于分布,我不太了解 Ubuntu,但“proxy_arp”设置可能可以在 /etc/sysctl.conf 中设置:
net.ipv4.conf.eth0.proxy_arp = 1
应该将 node2 的 eth1 上的 IP 地址添加到接口配置中(但不添加任何网络掩码!或前缀长度为“/32”),还应该有一个地方放置静态路由(我的系统上为 /etc/sysconfig/static-routes)。