Linux在接口之间转发数据包

Linux在接口之间转发数据包

我想在接口之间转发数据包而不使用 iptables。我本身并不反对 iptables,我只是相信对于我的简单需求来说这是没有必要的。但是我无法这样做。我可以吗?

场景如下:我在主机 A 上有一个无线接口和一个硬连线接口。我的无线网关的 IP 为 10.0.0.1。我的无线接口是10.0.0.12。

所以我想,如果我使用 sysctl 启用端口转发,并在网络上为我的有线接口创建一个 IP,然后为连接到有线接口的主机(称为主机 B)创建一个路由表条目,那么一切都应该很好, 不?

所以我有:

  • 无线的:
    • 网关==10.0.0.1
    • 主机A接口==10.0.0.12
    • 主机 A 网络掩码 == 255.255.255.0
  • 有线:
    • 主机A接口==10.0.0.99
    • 主机 B 接口 == 10.0.0.100,插入主机 A。
    • 网络掩码为 255.255.255.255 的主机 B 的路由表条目。

我可以从主机 A ping 和 ssh 到主机 B。但是当我尝试从主机 B ping 网关时,我在主机 A 的有线接口上看到很多这样的内容:

12:56:55.211866 ARP, Request who-has gateway tell 10.0.0.100, length 46
12:56:56.211751 ARP, Request who-has gateway tell 10.0.0.100, length 46
12:56:57.214187 ARP, Request who-has gateway tell 10.0.0.100, length 46
12:56:58.211834 ARP, Request who-has gateway tell 10.0.0.100, length 46
...

我是否缺少某些东西,或者我需要 iptables 吗?

这是我在主机 A 上的路由表:

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG        0 0          0 wlp3s0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 wlp3s0
10.0.0.100      0.0.0.0         255.255.255.255 UH        0 0          0 enp0s25

广告谢谢万斯!

顺便说一句,在主机 A 上:

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

答案1

不能有 2 个不同的网络块具有相同的地址空间。因此,执行 ip_forward 是没有用的,因为 ip_forward=1 用于路由。因此,要么在两个网络块中使用不同的网络,要么如果您确实想要此设置,请设置一个网桥。

如果在 Debian 中

$sudo apt-get install bridge-utils

vi /etc/network/interfaces

   allow-hotplug wlan0  
      iface wlan0 inet manual

   auto eth0   
      iface eth0 inet manual

   auto br0  
   iface br0 inet static  
   bridge_ports eth0 wlan0  
      address 10.0.0.1  
      netmask 255.255.255.0

$sudo service networking restart

相关内容