我對 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 ……我在 pre-up 中有 iptables-restore ,它包括 -A INPUT -i ! lo -d 127.0.0.0/8 -j拒絕現在已棄用的語法...
所以,如果你有這樣的行
準備 iptables-restore /etc/iptables.up.rules
在 /etc/network/interfaces 中,檢查規則是否正確。
在 739251 bug 的具體情況下,替換
-A 輸入 -i ! lo -d 127.0.0.0/8 -j 拒絕
和
- 輸入! -i lo -d 127.0.0.0/8 -j 拒絕