![iptables 规则 - 输入和输出](https://linux22.com/image/52189/iptables%20%E8%A7%84%E5%88%99%20-%20%E8%BE%93%E5%85%A5%E5%92%8C%E8%BE%93%E5%87%BA.png)
我是 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
。