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。
- 主機 B 的路由表條目,網路遮罩為 255.255.255.255。
我可以從主機 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
您不能有 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