检查当前的 iptables 规则

检查当前的 iptables 规则

好的,为了得到一些回应,这是一个 TL;DR 版本。我知道以下命令:

iptables -A PREROUTING -t nat -i eth0 --dport 80 --source 1.1.1.1 -j REDIRECT --to-port 8080

... 将所有流量从端口 80 重定向到端口 8080。问题是我必须对每个要重定向的端口执行此操作。为了面向未来,我希望将 IP 的所有端口重定向到不同的(内部)IP,这样如果有人决定启用 SSH,他们可以直接连接而不必担心 iptables。

需要什么才能可靠地将所有流量从外部 IP 转发到内部 IP,反之亦然?


扩大的视野

我在网上搜索过这个问题,但一直没有得到确切的答案。我有一个物理服务器 (HOST),上面有几台需要将流量重定向到它们的虚拟机 (VM)。现在只需让它与一台机器一起工作就足够了。

VM 在 VirtualBox 下运行,并设置为使用仅主机适配器 (vboxnet0)。一切似乎都正常,但延迟严重。主机 (CentOS 5.6) 和客户机 (Ubuntu 10.04) 都运行 Linux。

我做了以下事情:

  1. 配置虚拟机在 vboxnet0 适配器的网络中拥有静态 IP。
  2. 为主机添加 IP 别名,注册到专用(外部)IP。
  3. 设置 iptables 以允许流量通过(通过 sysctl)。
  4. 配置 iptables 将数据从给定 IP 地址 DNAT 和 SNAT 到内部地址。

iptables 命令:

sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE

iptables -t nat -I PREROUTING -d $OUT_IP -I eth0 -j DNAT --到目的地$IN_IP
iptables -t nat -I POSTROUTING -s $IN_IP -o eth0 -j SNAT --to-source $OUT_IP

现在网站可以运行了,但是速度真的很慢。我希望我忽略了一些简单的事情,但我现在没有主意了。

一些背景信息:在此之前,该网站使用基本的端口转发。例如,使用 iptables 将端口 80 映射到端口 8080。在 VirtualBox(将网络适配器配置为 NAT)中,反向端口转发使一切顺利进行。问题有两个方面:首先,需要转发多个端口(用于管理界面、https、ssh 等)。其次,它只允许一个 IP 地址使用端口 80。

为了解决这个问题,不同的(子)域使用多个外部 IP 地址。同样,“VirtualBox”网络将包含虚拟机:

DNS 扩展。 IP 适配器 VM“VirtalBox”IP
------------------------------------------------------------------
a.example.com 1.1.1.1 eth0:1 vm_guest_1 192.168.56.1
b.example.com 2.2.2.2 eth0:2 vm_guest_2 192.168.56.2
c.example.com 3.3.3.3 eth0:3 vm_guest_3 192.168.56.3

等等。简而言之,目标是将所有流量从a.example.com引导到vm_guest_1(换句话说,从1.1.1.1引导到192.168.56.1)。并以可接受的速度实现这一目标 :)。

答案1

既然您已经为虚拟机分配了公共地址,也许您应该考虑使用桥接网络而不是 NAT?您将获得更清晰的设置。

如果您担心您的客人在桥接设置中互相干扰,您仍然可以使用ebtables和/或静态 arp 来强化事情。

答案2

检查当前的 iptables 规则

iptables -t nat -L -n -v

启用 IP 转发

echo "1" > /proc/sys/net/ipv4/ip_forward

cat /proc/sys/net/ipv4/ip_forward

转发 PG 流量的规则

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination new-master-ip:80

iptables -t nat -A POSTROUTING -j MASQUERADE

检查 iptables 规则

iptables -t nat -L -n -v

相关内容