简单端口转发

简单端口转发

我搜索了又搜索,尝试了几种不同的方法,但还是无法找到解决方案。

我的情况如下:

节点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)。

相关内容