我有两台服务器,服务器 A 和服务器 B。子网 192.168.1.0/24 的流量通过服务器 A 进入。服务器 A 与服务器 B 设置了 GRE 隧道,并通过 GRE 隧道将 192.168.1.0/24 接收的所有流量路由到服务器 B。
服务器 B 应该通过 GRE 隧道接收发往 192.168.1.0/24 的流量,并通过其默认网关转发。目前的情况是,服务器 A 成功地通过 GRE 隧道将流量发送到服务器 B,服务器 B 接收流量,但不通过其默认网关转发。
我正在运行 Ubuntu 18.04,并且已启用 IP 转发:
root@serverB:~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
我不知道为什么,但它就是拒绝转发数据包。据我所知,它应该通过默认网关转发数据包。我甚至在服务器 B 上添加了一条静态路由,以通过默认网关转发发往 192.168.1.0/24 的流量,但它仍然不转发任何流量,只接收入站流量。我可以看到大约 2Kbps 的入站流量,目的地是 192.168.1.0/24,但没有发送出站流量。以下是服务器 B 上的路由:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.204.1 0.0.0.0 UG 0 0 0 enp2s0 #Default Gateway
10.0.0.0 0.0.0.0 255.255.255.252 U 0 0 0 gre1 #GRE tunnel
192.168.1.0 192.168.204.1 255.255.255.0 UG 0 0 0 enp2s0 #static route I added
有人有什么想法吗?其他帖子都在谈论 NAT 和伪装,但我不想代理任何东西,只想通过此服务器透明路由到下一个网关。
答案1
rp_filter
在内核中禁用。这解决了我的问题。
反向路径转发可以使用以下命令禁用
root@serverB:~# sysctl -w net.ipv4.conf.default.rp_filter=0