![Linux在接口之间转发数据包](https://linux22.com/image/77381/Linux%E5%9C%A8%E6%8E%A5%E5%8F%A3%E4%B9%8B%E9%97%B4%E8%BD%AC%E5%8F%91%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我想在接口之间转发数据包而不使用 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