iptables:“协议套接字错误types”

当我运行以下命令:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 

我得到以下错误:

 iptables: Protocol wrong type for socket. 

我通过strace运行命令,我可以看到它在setsockopt调用失败:

 socket(PF_INET, SOCK_RAW, IPPROTO_RAW) = 4 fcntl64(4, F_SETFD, FD_CLOEXEC) = 0 getsockopt(4, SOL_IP, 0x40 /* IP_??? */, "filter\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., [84]) = 0 getsockopt(4, SOL_IP, 0x41 /* IP_??? */, "filter\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., [12328]) = 0 setsockopt(4, SOL_IP, 0x40 /* IP_??? */, "filter\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 12736) = -1 EPROTOTYPE (Protocol wrong type for socket) 

有什么可能会出错? 我怀疑这是一个缺失的内核configuration选项,但有大约50个选项与netfilter相关,我不只是想开始打开他们,而不理解我在做什么。 有没有办法找出缺less的东西?

编辑:看起来像在iptables失败的调​​用是setsockopt(handle->sockfd, TC_IPPROTO, SO_SET_REPLACE, ...)

有我的Android 2.3.3 / Linux Squeeze设备类似的问题,并find我的答案在这个页面的左侧。 适用于iptables 1.3.7。

iptables允许所有传出 – 仍然不能解决DNS或发出一个HTTP请求

 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT