我对 Linux 网络接口的了解非常有限,所以我希望有人能帮助我找到解决我无意中造成的问题的最佳方法。
启动后,我的工作站上的环回设备似乎不存在。需要环回地址的操作(例如在 Eclipse 中运行 JUnit 测试套件)无法正常工作。但是,直到最近,在我摆弄 iptables 将端口 80 转发到端口 8080 之后不久,它才恢复正常,所以这可能是我做了什么,但我不知道如何修复它,到目前为止,所有谷歌搜索都没有找到任何指针(我可能不知道正确的搜索词......)
首先,内容/etc/network/interfaces
:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
pre-up iptables-restore /etc/iptables.conf
post-down /etc/iptables-flush-all
现在,启动我的机器后:
$ sudo ifconfig
eth0 Link encap:Ethernet HWaddr 00:24:e8:25:90:5d
inet addr:10.33.1.106 Bcast:10.33.1.255 Mask:255.255.255.0
inet6 addr: fe80::224:e8ff:fe25:905d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:500239 errors:0 dropped:0 overruns:0 frame:0
TX packets:334565 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:617321176 (588.7 MiB) TX bytes:36019254 (34.3 MiB)
Interrupt:26 Base address:0x8000
如果我运行ifconfig lo 127.0.0.1
,那么一切都会很好,并且输出ifconfig
将更改为:
$ sudo ifconfig
eth0 Link encap:Ethernet HWaddr 00:24:e8:25:90:5d
inet addr:10.33.1.106 Bcast:10.33.1.255 Mask:255.255.255.0
inet6 addr: fe80::224:e8ff:fe25:905d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:606221 errors:0 dropped:0 overruns:0 frame:0
TX packets:407173 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:767892736 (732.3 MiB) TX bytes:42051623 (40.1 MiB)
Interrupt:26 Base address:0x8000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:65 errors:0 dropped:0 overruns:0 frame:0
TX packets:65 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:35668 (34.8 KiB) TX bytes:35668 (34.8 KiB)
那么,有人能帮我弄清楚我做了什么来破坏我的环回地址吗?
編輯 0: 内容/etc/iptables.conf
:
chris@PC:~$ sudo cat /etc/iptables.conf
# Generated by iptables-save v1.4.8 on Thu Nov 10 17:01:44 2011
*nat
:PREROUTING ACCEPT [2:440]
:POSTROUTING ACCEPT [2:102]
:OUTPUT ACCEPT [1:58]
-A PREROUTING -d 127.0.0.1/32 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination :8080
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
# Completed on Thu Nov 10 17:01:44 2011
# Generated by iptables-save v1.4.8 on Thu Nov 10 17:01:44 2011
*mangle
:PREROUTING ACCEPT [4787:2521834]
:INPUT ACCEPT [4544:2507689]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4190:913164]
:POSTROUTING ACCEPT [4117:908160]
COMMIT
# Completed on Thu Nov 10 17:01:44 2011
# Generated by iptables-save v1.4.8 on Thu Nov 10 17:01:44 2011
*filter
:INPUT ACCEPT [2699:1514101]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2525:612477]
COMMIT
# Completed on Thu Nov 10 17:01:44 2011
克里斯@PC:~$sudo iptables -L -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
克里斯@PC:~$sudo iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
克里斯@PC:~$sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
编辑1:注释掉eth0
我的pre-up 和 post-down 行/etc/network/interfaces
似乎可以消除这个问题。
在将环回地址更改为以下内容后,它在启动过程中被正确配置/etc/network/interfaces
:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
#pre-up iptables-restore /etc/iptables.conf
#post-down /etc/iptables-flush-all
这两行用于在启用和禁用接口时加载和卸载 iptables 规则。我读到,这是在 Debian 中配置防火墙的更好方法,而不是在启动时加载所有规则。
的内容/etc/iptables-flush-all
为:
克里斯@PC:~$sudo cat /etc/iptables-flush-all
#!/bin/sh
iptables --flush
iptables -t nat --flush
iptables -t mangle --flush
iptables -t filter --flush
答案1
如果防火墙没有加载,它还能工作吗?
顺便说一句,“ifconfig”已弃用;最好使用“ip”进行所有操作,包括诊断。我认为这与您的问题完全无关。
答案2
就我而言,这是一个正确配置 /etc/hosts 的问题。
使用命令获取您的主机名主机名并按如下方式设置 /etc/hosts:
127.0.0.1 本地主机 127.0.1.1 主机名
答案3
就我而言https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739251 ...我在 lo 预备中获得了 iptables-restore,它包含 -A INPUT -i ! lo -d 127.0.0.0/8 -j rejection,这是现在已弃用的语法...
所以如果你有这样的行
准备 iptables-restore /etc/iptables.up.rules
在 /etc/network/interfaces 中,检查规则是否正确。
对于 739251 错误的具体情况,请替换
-A 输入-i !lo -d 127.0.0.0/8 -j 拒绝
和
-A 输入!-i lo -d 127.0.0.0/8 -j 拒绝