Eam*_*orr 1 networking linux iptables
我无法弄清楚 iptables,我对网络也不太了解,我真的希望有人能帮助我。
我有一个服务器,它有两个关联的 IP 地址:1.1.1.1 和 2.2.2.2
运行 Ubuntu 10.04
这是我的 ifconfig:
eth0 Link encap:Ethernet HWaddr 00:16:3e:xx:xx:xx
inet addr:1.1.1.1 Bcast:xxx.xxx.xxx.xxx Mask:xxx.xxx.xxx.xxx
inet6 addr: xxxxxxxxxxxxxxxxxxxxxxxx Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8601280 errors:0 dropped:0 overruns:0 frame:0
TX packets:2520243 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1736805563 (1.7 GB) TX bytes:412953236 (412.9 MB)
Interrupt:11
eth0:0 Link encap:Ethernet HWaddr 00:16:3e:xx:xx:xx
inet addr:2.2.2.2 Bcast:xxx.xxx.xxx.xxx Mask:xxx.xxx.xxx.xxx
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:11
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:1216209 errors:0 dropped:0 overruns:0 frame:0
TX packets:1216209 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:13294196379 (13.2 GB) TX bytes:13294196379 (13.2 GB)
Run Code Online (Sandbox Code Playgroud)
一切正常:当我在浏览器的地址栏中输入 1.1.1.1 或 2.2.2.2 时,我会按预期获得默认的 Apache2 页面。
现在,我有一个在浏览器中运行的应用程序,该应用程序在端口 8000 上有一个 WebSocket 连接。我像往常一样使用 1.1.1.1 通过端口 80 (http) 为页面提供服务,并且我让 WebSocket 在后台与 2.2.2.2 通信通过端口 8000。一切都很好。
现在我插入阻止端口 8000 的 3G 调制解调器。我与 2.2.2.2 的 WebSocket 通信失败。
我希望 WebSocket 通过端口 80 与 2.2.2.2 通信,但让服务器将 2.2.2.2:80 上的请求转换为 1.1.1.1:8000。
我发现了这个:meteorserver dot org/installation/(见第 6 节)但它没有用;(我也试过这个:http ://www.cyberciti.biz/faq/linux-port-redirection-with-iptables/但它给了我以下错误:
ubuntu> sudo iptables -t nat -A PREROUTING -i eth0:0 -p tcp --dport 80 -j REDIRECT --to-port 8000
Warning: weird character in interface `eth0:0' (No aliases, :, ! or *).
Run Code Online (Sandbox Code Playgroud)
显然不支持 IP 别名;(我尝试将 eth0:0 放在引号中,但仍然无法正常工作。
我完全被难住了。
Eva*_*son 10
你在正确的轨道上。您不必指定“别名”输入接口。从 iptables 的角度来看,即使目标 IP 地址是 2.2.2.2,输入接口仍然是 eth0。试试这种方式:
iptables -t nat -A PREROUTING -i eth0 -d 2.2.2.2 -p tcp --dport 80 -j REDIRECT --to-port 8000
Run Code Online (Sandbox Code Playgroud)
那应该做你正在寻找的。
编辑:
您需要在该命令中使用“eth0”——而不是“eth0:0”(这是不合法的)。数据包进入的物理接口是“eth0”,这是所有 iptables 所关心的。
除非您使用的协议是基于 UDP 的,否则您不需要相应的“-p udp”条目。
现在要查看“PREROUTING”链中的内容,请执行iptables -t nat -L. 您可以使用以下方式从链中删除单个条目,iptables -t nat -D PREROUTING x其中“x”是您要删除的链中条目的顺序计数(第一个是“1”,第二个是“2”等),如下所示iptables -t nat -L.
| 归档时间: |
|
| 查看次数: |
21728 次 |
| 最近记录: |