当我运行以下命令:
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