linux下使用iptables实现内网的ftp端口映射

回复 收藏
有两台机器,其中一台A 有内网和外网,B机器只有内网。
想达到的目的: 通过A机器的外网去访问B机器的ftp(21)
环境:
A机器外网IP为  123.234.12.22(eth1)  内网IP为 192.168.10.20 (eth0)
B机器内网为 192.168.10.21

实现方法:
1.  让你的linux支持ftp的端口转发
modprobe ip_nat_ftp ###加载ip_nat_ftp模块(若没有编译进内核),以使ftp能被正确NAT
modprobe ip_conntrack_ftp ###加载ip_conntrack_ftp模块
2.  在A机器上打开端口转发功能
vi  /etc/sysctl.conf
使 net.ipv4.ip_forward = 1
sysctl -p
3.  在A机器上创建iptables规则
iptables -t nat -I PREROUTING -d 123.234.12.22   -p tcp --dport 21 -j DNAT --to 192.168.10.21:21  (把访问外网21端口的包转发到内网ftp服务器)
iptables -t nat -I POSTROUTING -d 192.168.10.21 -p tcp --dport 21 -j SNAT --to 192.168.10.20 (把到内网ftp服务器的包回源到内网网卡上,不然包只能转到ftp服务器,而返回的包不能到达客户端)
2012-03-30 22:32 举报
已邀请:
0

lyhabc

赞同来自:

有点复杂,步骤不是很清楚
0

gjc159357

赞同来自:

多练习才可以记住
0

善轩昂

赞同来自:

看的脑袋大了,有点儿晕
0

huchiwen

赞同来自:

好复杂!
0

sincethen

赞同来自:

本帖最后由 sincethen 于 2015-9-26 19:13 编辑

有几点问题:FTP分为主动模式(PORT)和被动模式(PASV)。主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。两者的共同点是都使用21端口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间随机


所以第三步
3.  在A机器上创建iptables规则
把外网访问的20和21端口的包转发到内网ftp服务器
iptables    -t nat -I PREROUTING      -d 123.234.12.22   -p tcp --dport 20,21       -j DNAT --to 192.168.10.21


内网ftp服务器返回包进行源地址转换,这里是 -s 不是-d ,端口号要去掉
iptables    -t nat -I POSTROUTING -s 192.168.10.21 -p tcp     -j SNAT --to-source 192.168.10.20

0

yanggang

赞同来自:

是不是还需要把B机的网关指向A机呢
0

善思致用

赞同来自:

yanggang 发表于 2015-12-10 18:04
是不是还需要把B机的网关指向A机呢

不需要
0

gfzq0901

赞同来自:

端口映射。

0

jinwucui

赞同来自:

这是不是和寄信是类似道理,朋友委托我寄信(SNAT),我寄出去后,回信到我这里,我又把信转给了朋友(DNAT),最主要的一个环节就是在端口转发那,然后在外网的机子上配置iptables?

0

喀洛池

赞同来自:

学习学习

0

Welkin

赞同来自:

SNAT这里面涉及到“三角传输”的问题,内网直接访问映射后的公网地址,会造成折返路径中源、目地址不统一,而直接丢包…第二条语句,意味着内网如果要访问公网地址eth0,将会把源地址改为eth1
0

548840

赞同来自:

有点复杂,慢慢理解

0

飞奔的小GUI

赞同来自:

有些问题,我用vmware的nat模式创建了两个内网主机,将一台内网的ftp服务器,映射到另外一台内网的166端口,按照上面的配置,两端开启tcpdump,客户端去访问,发现包没有到达ftp服务器的21,而将ftp服务器的网关改为另外一台内网服务器的ip,发现映射可以成功了,centos 7的系统

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: