Linux 作为网关(无 NAT)

Linux 作为网关(无 NAT)

我正在尝试将 Linux 服务器配置为网关/路由器,但无法使其工作,而且我设法找到的所有信息都与 NAT 相关。

我有一个用于网关和其后面设备的公共 IP 块,所以我希望网关简单地将数据包路由到互联网 - 再次:无需 NATing!

我已经设法让网关成功访问互联网(这只是配置 IP 和 GW 的问题),并且其后面的计算机可以与其通信。

[编辑:更多信息]

这实际上是一个 IPv6 块(2800:40:403::0/48)(但我发现大多数实用程序和说明可以轻松地从 IPv4 适应到 IPv6)。

服务器有太多端口:

  • 万:2800:40:403::1/48
  • 局域网:2800:40:403::3/48

它后面的其中一台计算机通过交换机与其连接;

  • 2800:40:403::7/48

服务器上的 wan 接口可以 ping 通 www.google.com,没有任何问题。服务器和客户端上的 lan 接口可以互相 ping 通,没有任何问题(SSH 等也是如此)。

我尝试将服务器设置为客户端的默认网关,但没有成功:

client # route -A inet6 add default gw 2800:40:403::3 dev eth1

server # cat /proc/sys/net/ipv6/conf/all/forwarding 
1

我不需要任何过滤/防火墙/等等,只需要简单的路由。

谢谢。

答案1

我假设您的 WAN 端有一个公共 IP 地址,LAN 端有一个地址块,如下所示:

ISP-----ROUTER ETH0/ROUTER ETH1------SWITCH------PCs

您需要为 WAN 接口提供一个公共 IP 地址,ISP 将通过此 IP 地址路由他们提供给您的子网

只需将转发位设置为 1

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

为了使其持久,您需要编辑 /etc/sysctl.conf,找到以下行:

net.ipv4.ip_forward=0

并将其更改为

net.ipv4.ip_forward=1

如果有注释请务必取消注释。

现在,您需要做的就是将您电脑的默认网关设置为指向 Linux 路由器,并假设 ISP 已通过将块路由到您的 LAN 端的公共 IP 地址来完成其工作。

现在。如果您只有公共地址块...您无需考虑路由,只需将 ISP 连接到交换机并将所有 PC 连接到交换机即可。如果您可以指定更多详细信息,我们可能会为您提供更多帮助。


编辑:

您说您的接口配置如下:

wan: 2800:40:403::1/48
lan: 2800:40:403::3/48

您的默认网关是什么?我猜是 2800:40:403::2/48

它不应该这样工作。我还没有使用过 IPv6,但你在一个子网中有两个接口,我想我会允许你配置它,但思科路由器至少会警告你重叠

最简单的解决方案是将所有 PC 都接入与 ISP 连接的交换机。

真正的解决方案是告诉 ISP 在其地址空间上为您提供 1 个公共地址用于 WAN,并通过该地址路由块。然后您要做的就是配置:

wan: ip-from-their-space
lan: 2800:40:403::1/48

并且所有局域网 PC 都应将其作为默认值。

您拥有非常大的地址空间,您可以做的是进一步对其进行子网划分。


编辑:

如果您确实想桥接接口,您可以不通过任何与 IP 相关的方式进行操作。这样,您将只有一个具有 IP 地址的接口。

您需要做的就是安装 bridge-utils,然后按如下方式配置它:

ip add flush dev eth0
ip add flush dev eth1
brctl addbr br0
brctl addif br0 eth0 eth1
ip link set dev br0 up

然后在 br0 上配置 IPv6 地址,现在您有一个透明桥。它仍然不能解决您的 IPv4 问题,但您可以这样解决:

在 br0 上配置 IPv4 公有地址和私有地址,并按如下方式进行 NAT:

iptables -t nat -A POSTROUTING -j SNAT -s / --to-source

答案2

是否启用转发?

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

相关内容