如何在 Ubuntu 的 iptables 中设置端口转发?

如何在 Ubuntu 的 iptables 中设置端口转发?

这句话应该可以解释我如何做到这一点,但我不明白......

接下来,我添加了以下规则,将所有 http 请求(到达端口 80)转发到 Squid 服务器端口 3128:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 80 -j DNAT --to 127.0.0.1:3128
iptables -t nat -A PREROUTING -i venet0:0 -p tcp --dport 80 -j REDIRECT --to-port 3128

这应该可行,但实际上却不行。我的iptables是空的,而/etc/network/interface以下内容:

auto lo
iface lo inet loopback
    address 127.0.0.1
    netmask 255.0.0.0
    broadcast 127.255.255.255
    up ip route replace 127.0.0.0/8 dev lo
# Auto generated venet0 interfaces
auto venet0
iface venet0 inet static
    address 127.0.0.1
    netmask 255.255.255.255
    broadcast 0.0.0.0
    up route add default dev venet0
iface venet0 inet6 static
    address ::2
    netmask 128
    up ip -6 r a default dev venet0
    up ip addr add {...externalIPv6...} dev venet0
auto venet0:0
iface venet0:0 inet static
    address {...externalIP...}
    netmask 255.255.255.255

答案1

我将以此作为答案,尽管它还不是(但愿目前还不是)。我这样做的原因是我相信这个问题需要多次迭代才能解决。

在我看来,您的 iptables 规则没有问题,但我认为您的 /etc/network/interfaces 文件存在一些问题。您是从某处复制的,还是根据您的需要进行了调整?

我看到的问题:

  1. 为什么要指定环回接口?通常,本节的前两行就可以了。
  2. 您正在为同一个接口 venet0 分配两个地址。
  3. 第一个 venet0 节的网络掩码限制过多,并且与广播地址不一致。
  4. venet0 的第二个节分配有两个地址,即外部 IPv6 地址和 ::2。
  5. 在 venet0 的节中,网络掩码的限制太严格。
  6. 同一个接口,venet0/venet0:0,分配了环回地址和外部地址,这有什么意义呢?

如果您能告诉我们您想用 VMWare 做什么,那将会很有帮助,现在我很茫然。

相关内容