通过具有两个 NIC 的服务器访问互联网(或其他网络)

通过具有两个 NIC 的服务器访问互联网(或其他网络)

我目前有以下设置,我需要服务器#1使用其第二个NIC通过服务器#2访问互联网。

使用静态路由可以实现吗?如果可以,应该将哪条路由添加到哪里?

目前服务器1可以ping通服务器2,服务器2可以访问互联网,并且可以ping通服务器1。

网络图

答案1

您应该在服务器 2 上桥接 NIC 1 和 NIC 2 之间的连接。将服务器 1 上的 IP 更改为 192.168.1.x 之类的地址,并将默认网关更改为 192.168.1.254。您还必须将服务器 2 NIC 1 的 IP 更改为 192.168.1.y。这样,服务器 1 就可以联系其默认网关(路由器 1),后者会将 IP 数据包转发到互联网。

另一个解决方案是配置服务器 2,使其使用 NAT 将从服务器 1 收到的数据包转发到其默认网关。这样,服务器 2 将成为半路由器。

答案2

假设是linux。

你需要做两件事:

  1. 开启 IP 转发
  2. 设置伪装源网络地址转换 (SNAT)

保持一切原样并检查 IP 转发是否已打开。

sysctl net.ipv4.ip_forward

[root@somehose ~]$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

如果将其设置为 0(如上例所示),那么您需要将其设置为 1(开)。

编辑/etc/sysctl.conf 确保:

net.ipv4.ip_forward = 1

运行sysctl -p重新加载sysctl.conf,将导致读取并设置该文件中的所有设置。由于它位于文件中,因此它们在启动时也会被保留。

然后再次运行 sysctlnet.ipv4.ip_forward以确保它确实发生了变化。

[root@somehose ~]$ sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1

现在我对上述内容非常有信心。

您还需要在 server2 上打开 SNAT。假设服务器 #2 NIC #2 是 eth1,服务器 #2 NIC #1 是 eth0

我对实际的命令语法不是 100% 确定,而且我也没有可以测试的地方,但您可以直接在 Google 上搜索“伪装 iptables SNAT”,然后就可以找到操作方法。想一想,您可以用 Google 搜索一下,然后得到完整的答案。没关系。

iptables -t nat -A POSTROUTING --out-interface eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 10.10.10.3

您需要将其放入适合您的发行版的文件中,以便它在重启后仍然有效。

相关内容