iptables实现端口转发的过程(修改版)
张贴者: BenStone (newbie)
张贴日期 07/05/02 03:01 PM
看了不少关于用iptables实现端口转发的文章,但感觉都没有把问题说得很清楚,现接合我自己设置和使用的经历,谈谈它的实现过程.
设我们有一台计算机,有两块网卡,eth0连外网,ip为1.2.3.4;eth1连内网,ip为192.168.0.1.现在需要把发往地址1.2.3.4的81端口的ip包转发到ip地址192.168.0.2的8180端口,设置如下:
1. iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81 -j DNAT --to-destination192.168.0.2:8180
2. iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1
真实的传输过程如下所示:
假设某客户机的ip地址为6.7.8.9,它使用本机的1080端口连接1.2.3.4的81端口,发出的ip包源地址为6.7.8.9,源端口为1080,目的地址为1.2.3.4,目的端口为81.
主机1.2.3.4接收到这个包后,根据nat表的第一条规则,将该ip包的目的地址更该为192.168.0.2,目的端口更该为8180,同时在连接跟踪表中创建一个条目,(可从/proc/net/ip_conntrack文件中看到),然后发送到路由模块,通过查路由表,确定该ip包应发送到eth1接口.在向eth1接口发送该ip包之前,根据nat表的第二条规则,如果该ip包来自同一子网,则将该ip包的源地址更该为192.168.0.1,同时更新该连接跟踪表中的相应条目,然后送到eth1接口发出.
此时连接跟踪表中有一项:
连接进入: src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81
连接返回: src=192.168.0.2 dst=6.7.8.9 sport=8180 dport=1080
是否使用: use=1
而从192.168.0.2发回的ip包,源端口为8180,目的地址为6.7.8.9,目的端口为1080,主机1.2.3.4的TCP/IP栈接收到该ip包后,由核心查找连接跟踪表中的连接返回栏目中是否有同样源和目的地址和端口的匹配项,找到后,根据条目中的记录将ip包的源地址由192.168.0.2更该为1.2.3.4, 源端口由8180更该为81,保持目的端口号1080不变.这样服务器的返回包就可以正确的返回发起连接的客户机,通讯就这样开始.
还有一点, 在filter表中还应该允许从eth0连接192.168.0.2地址的8180端口:
iptables -A INPUT -d 192.168.0.2 -p tcp -m tcp --dport 8180 -i eth0 -j ACCEPT
无才可去补苍天,枉入红尘若许年
参考:http://www.linuxforum.net/docnew/showthreaded.php?Cat=&Board=sys&Number=476&page=1&view=collapsed&sb=5&o=all&fpart=
分享到:
相关推荐
在IT领域,端口转发是一种网络技术,它允许网络数据包从一个端口转发到另一个不同的端口,通常跨越不同的网络或设备。这种技术在多种场景下非常有用,例如访问受限制的网络服务、测试本地服务器或者保护隐私。在这个...
本压缩包“易语言多线程端口转发源码.rar”提供了使用易语言实现的多线程端口转发的源代码,这对于学习网络编程和易语言开发的初学者来说是一份非常宝贵的资料。 1. **多线程**:在计算机科学中,多线程是指一个...
2. **UDP端口转发命令**:使用`sokit`进行UDP端口转发,可以通过命令行指定源端口和目标端口。例如,将本地的5000端口的数据转发到远程服务器的6000端口,命令如下: ``` sokit forward udp 0.0.0.0:5000 remote...
端口转发工具是网络通信中的一种重要技术,它允许用户通过一个特定的网络接口(端口)访问在其他网络接口上的服务。PortTunnel作为一款高效实用的端口转发工具,其功能强大,能帮助用户轻松实现TCP和UDP端口的数据...
标题中的“delphi编写的端口转发,端口映射的例子”表明这是一个使用Delphi编程语言实现的项目,主要功能是进行端口转发和端口映射。在计算机网络中,端口转发和端口映射是两种重要的网络通信技术。 端口转发,也...
端口映射与端口转发是网络通信中的关键技术,特别是在处理内网访问与网络安全时。C#作为.NET框架下的主要编程语言,提供了丰富的库和API来实现这些功能。在这个场景下,`Htran`是一个知名的端口映射和端口转发工具,...
标题中的“两个Windows的端口转发工具,passport和fpipe”指的是在Windows操作系统中用于网络端口重定向的软件工具。端口转发是网络技术的一种,它允许数据包从一个端口转发到另一个不同的端口,这对于测试、调试、...
windows好用的端口转发工具
TCP多端口转发工具是一种网络通信技术,它允许数据包从一个特定的源端口转发到多个目标端口。在给定的项目中,数据原本是发送到单一端口的,但现在通过编程实现了一个功能,使得这些数据可以被随机地转发到多个不同...
windows端口转发工具(3款)
window端好用的tcp端口转发工具,可实现端口映射,端口转发
端口转发-c++一个不错的参考,类似lcx.exe工具 Dos下的软件大家应该会用吧,x:lcx –listen 34 2389,说明一下这句指令的意思,这句话的意思就是监听本机的34端口然后将数据转发到2389端口,当然这里的34 2389端口是...
端口转发工具(批量转发,windows下最好用得端口转发工具),支持tcp+udp转发。 支持以服务的方式运行。
标题中的“Mac 端口转发Python工具”指的是在苹果Mac操作系统上,通过Python编程语言实现的端口转发功能。这种工具通常用于网络调试、安全分析或者远程访问等场景,它能够将一个本地端口上的数据流量重定向到另一个...
端口转发易语言源码 测试可用,全套源码+编辑好的程序
在IT领域,端口转发是一种网络技术,用于将一个网络接口上的数据包转发到另一个不同的网络接口。在Windows操作系统中,实现端口转发通常涉及到利用特定的软件工具,如SSH客户端(如PuTTY)或者一些专门设计的端口...
【fpipe端口转发工具】是一种实用的网络工具,它允许用户通过本地不受限制的端口来访问那些受到远程访问限制的端口。在描述中提到的命令`fpipe -l 53 -s 53 -r 80 192.168.1.101`是一个具体的使用示例,解释了如何...
在"易语言源码易语言多线程端口转发源码.rar"这个压缩包中,包含的是使用易语言编写的、实现多线程端口转发功能的源代码。下面我们将详细探讨这个知识点。 1. **多线程技术**:在计算机程序中,多线程是一种并发...
爱好使用动态域名的朋友可能常常被设置端口转发权限而苦恼,本工具可以让你非常方便的添加端口映射。 操作方法:假如你的网页提供服务的端口是80,那么将上下两个端口映射端口都填上80,再点击执行动作即可添加完成。...
在本案例中,我们讨论的是一个使用易语言编写的端口转发器的源代码,该程序是非API版本,意味着它不依赖于操作系统提供的API函数来实现功能,而是利用自定义的代码完成端口转发任务。 端口转发是一种网络技术,它...