昨天我买了一台新电脑作为我的家庭服务器,一台 HP Proliant Microserver。在上面安装了 Arch Linux,内核版本为 3.2.12。
安装 iptables(据我所知,当前版本为 1.4.12.2)并将密钥更改net.ipv4.ip_forward
为 1,并在 iptables 配置文件中启用转发(并重新启动)后,系统无法使用其任何网络接口。Ping 失败,并显示
Ping: sendmsg: operation not permitted
如果我完全删除 iptables,网络就可以了,但我需要将互联网连接共享到本地网络。
eth0- 主板上集成的 wan NIC(Broadcom NetXtreme BCM5723)。
eth1- pci-express 插槽中的 lan NIC(英特尔 82574L 千兆网络)
由于它无需 iptables 即可工作(服务器可以访问互联网,我可以从内部网络使用 ssh 登录),因此我认为它与 iptables 有关。我对 iptables 不太熟悉,因此我使用以下内容作为参考(当然,这些内容是相互独立的...):
wiki.archlinux.org/index.php/Simple_stateful_firewall#Setting_up_a_NAT_gateway
revsys.com/writings/quicktips/nat.html
在我以前的服务器上,我使用 revsys 指南来设置 nat,效果非常好。
以前有人遇到过类似的事情吗?我做错了什么?
答案1
错误信息:
Ping: sendmsg: operation not permitted
表示不允许服务器发送 ICMP 数据包。您需要允许服务器通过一个或多个已配置的接口发送流量。您可以通过以下方式执行此操作:
设置
OUTPUT
链策略以ACCEPT
允许从你的盒子传出的所有流量:sudo iptables -P OUTPUT ACCEPT
- 设置
OUTPUT
链策略,DROP
然后有选择地允许您所需的流量类型。
这适用于所有链,而不仅仅是链OUTPUT
。INPUT
链控制您的盒子接收的流量。FORWARD
链处理通过盒子转发的流量。
答案2
对我来说,在 Debian 9 上,重新安装有帮助ping
:
apt-get install --reinstall iputils-ping
答案3
另一个选择是重置所有 iptable 规则。
将 iptables 上的默认策略设置为 ACCEPT:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
#Then flush the rules:
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
答案4
如果你维护了正确的 iptables 设置,你需要允许传出 ping:
# Allow outgoing ping
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT