
我是 Linux 和iptables
.我的 PC 上有一個 Ubuntu Server 發行版 (12.04),它有 2 個網路介面(eth0
和eth1
)。我還有兩台筆記型電腦,一台已插入eth0
,另一台已插入eth1
。
筆記型電腦1 ipconfig:172.16.221.120 - 255.255.252.0 筆記型電腦2 ipconfig:192.168.222.250 - 255.255.255.0
我想從laptop1成功ping到laptop2。
我必須建立INPUT
和OUTPUT
規則嗎?還是FORWARD
也有規定?
我嘗試過這個但沒有成功:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
答案1
您可以使用tcpdump
以下命令來了解您的 ping 值:
tcpdump -i eth0 -n icmp
tcpdump -i eth1 -n icmp
此外,僅僅允許伺服器上的 ping 是不夠的;必須對筆記型電腦進行配置,以便它們知道可以透過伺服器(路由)到達另一台筆記型電腦。
也許您的防火牆有一條規則允許作為回應的資料包。如果沒有那麼你還需要
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
無論如何,這是有道理的,因為您可能希望兩台筆記型電腦都能 ping 另一台筆記型電腦。不過,您可以將其限制為 ping 和 pong:
iptables -A FORWARD -i eth1 -o eth0 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT
最後一個問題是筆記型電腦本身:如果至少其中一台有自己的防火牆,那麼它可能會阻止 ping(通常或由於介面網路外部的來源位址)。
答案2
預設情況下,您不需要任何規則,因為帶有ACCEPT
預設策略的 netfilter 鍊是空的。如果您已經新增了規則,那麼要允許 ping 通過,需要將規則新增至FORWARD
鏈中。
您還需要將伺服器設定為路由器,並確保每台筆記型電腦都將伺服器作為預設路由(或至少具有另一台筆記型電腦子網路的路由)。
若要啟用路由(IP 轉送),需要設定/proc/sys/net/ipv4/ip_forward
為1
。 Ubuntu 應該有/etc/sysctl.conf
可以自動設定專案的地方/proc/sys
:
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
如果您確實更改了此設置,則需要將更改加載到核心中:
sudo sysctl -p /etc/sysctl.conf
更改將在下次啟動時自動加載,因此您只需在更改後手動執行此命令一次/etc/sysctl.conf
。