我正在尝试将 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