IP 转发 Ubuntu

IP 转发 Ubuntu

对于我的工作,我们有一个测试空间,里面有一台 Ubuntu 服务器,它也是一个路由器。昨天我们在机架上放置了一台新服务器,我们的目的是让它成为一个可以从互联网访问的网络服务器。Ubuntu 服务器/路由器首先只是一个路由器,它将流量从内部重定向到外部,它是一个 DHCP 服务器。

为了使路由器路由到 Internet,我们使用iptablesNAT:

*nat
:PREROUTING ACCEPT [323:23056]
:INPUT ACCEPT [59:6795]
:OUTPUT ACCEPT [31:2677]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth5 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [278:36336]
:FORWARD ACCEPT [18603:9408689]
:OUTPUT ACCEPT [105:12060]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT

现在我们想将一些流量重定向到 Web 服务器,但我们有几个公网 IP 地址。我们想将所有到 IP 地址 xxx.xxx.xxx.14 的流量路由到内部 IP 地址 10.10.10.10。

我尝试应用以下规则iptables

iptables -t nat -A PREROUTING -d xxx.xxx.xxx.14 -j DNAT --to 10.10.10.10
iptables -t nat -A POSTROUTING -s 10.10.10.10 -j SNAT --to-source xxx.xxx.xxx.14

但它似乎没有起到作用。

由于我的 Ubuntu/Linux 技能很低,我不知道我到底做错了什么。有人能帮我解决我的问题吗?

意思是所有到 IP xxx.xxx.xxx.14 的流量都被重定向到 10.10.10.10。所有其他流量都不需要处理,可以作为普通 NAT 流量重定向到eth5

eth2是外部以太网端口。eth5是内部以太网端口。

答案1

请检查 IP 转发是否已启用,若未启用,请启用它。

$ cat /proc/sys/net/ipv4/ip_forward
1


$ sudo su
# echo "1" > /proc/sys/net/ipv4/ip_forward
# exit
exit
$

编辑:好的,因此 ip_forward 已启用。

然后删除对 eth5 执行 MASQUERADE 的行。
确保您的特定 POSTROUTING 命令在规则集中位于通用命令之前。我的意思是:

iptables -t nat -A POSTROUTING -s 10.10.10.10 -j SNAT --to-source xxx.xxx.xxx.14

可能需要这样:

iptables -t nat -I 1 POSTROUTING -s 10.10.10.10 -j SNAT --to-source xxx.xxx.xxx.14

(或类似的,我没有检查语法)或者如果您拥有整个主规则集,请将其放在另一个之前。

注意:
使用默认的 ACCEPT 策略规则,您不需要条件 ACCEPT。

相关内容