这些是我正在使用的规则:
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface wlan5 -j MASQUERADE
iptables --append FORWARD --in-interface wlan3 -j ACCEPT
我的 wlan5 的地址是 192.168.1.100,wlan3 的地址是 10.0.0.1。我用 2 个 wifi 卡将我的笔记本电脑变成了一个 wifi 中继器。
因此人们连接到 wlan3,网关是 10.0.0.1,所有内容重定向到 wlan5 [gw 192.168.1.1]。
现在效果很好,除了我无法访问笔记本电脑上托管的本地 HTTP 服务器。该服务器托管在我的笔记本电脑上,并以 localhost 或 10.0.0.1 运行:
$ curl -I 10.0.0.1
HTTP/1.1 301 Moved Permanently
Date: Tue, 26 Feb 2013 02:35:32 GMT
Server: Apache/2.2.22 (Ubuntu)
Location: http://10.0.0.1/index.php
Vary: Accept-Encoding
Content-Type: text/html; charset=iso-8859-1
好的,问题就出在这里。我的共享网络 [wlan3] 上的 IP 为 10.0.0.20 的客户端尝试访问 10.0.0.1:80,但无法连接:
$ wget http://10.0.0.1
Connecting to 10.0.0.1 (10.0.0.1:80)
wget: can't connect to remote host (10.0.0.1): Connection refused
它可以 ping 10.0.0.1 甚至 ping 外部 IP。所以它有互联网连接,这就是重点,但它无法访问 HTTP,我相信是因为 iptables 规则。错误发生后,我在我的笔记本电脑系统日志上看到了以下内容:
Feb 25 21:36:19 toshi kernel: [57806.285170] Inbound IN=wlan3 OUT= MAC=9c:b7:0d:a5:45:67:a8:26:d9:3e:04:21:08:00 SRC=10.0.0.20 DST=10.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=28282 DF PROTO=TCP SPT=58343 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0
所以问题是,我怎样才能排除将 IP 请求转发到 10.0.0.1 而不是转发到 wlan5?
谢谢
答案1
编辑:再次,在我以为问题已经解决之后,它又停止工作了,我不再发出任何 iptables 命令。我不明白为什么它一直工作,然后又不工作了。>.<
我找到了一个不同的 iptables 命令,可以将我的互联网从一个 [长距离] wifi 设备共享到另一个 [内部]:
iptables -t nat -A POSTROUTING -o wlan5 -j MASQUERADE
而不是问题中的 iptables 命令。这样我仍然可以访问互联网,并且仍然可以从 10.0.0.20 访问 10.0.0.1 上的 http/ssh。
答案2
这iptables-save
输出您发布的内容在过滤表中显示了以下自定义链:INBOUND、OUTBOUND、LOG_FILTER、LSI 和 LSO。Firestarter 创建了 5 个链,所有链都以完全相同的方式命名。
我确信你的问题是由 Firestarter 引起的。打开它并检查它是否真的被禁用了。
参考: