<!DOCTYPE html>

Linux iptables NAT 透明代理教程

Linux iptables NAT 透明代理教程
Wednesday, July 9, 2014
3:40 PM

Linux iptables NAT 透明代理教程


时间: 2011-10-15 / 分类: 经验分享 / 浏览次数: 1,288人 / 0个评论 发表评论

Linux的iptables功能太强大,也相当有深度。
 不过我只需要用iptables实现“透明代理”功能。
 应用情景举例:
 例如,我想在外网访问内网的某台服务器的某个端口或服务。
 那可以现在某台同时具备外网和内网访问条件的接口服务器上部署iptables端口映射,
 将外网需要访问的端口转发到内网服务器的端口上。
 假设:
 1、接口服务器的内网IP是192.168.1.2,外网IP是8.8.8.8;
 2、需要访问的内网服务器的端口是1234,IP是192.168.1.3;
 那么,我可以通过在接口服务器上使用iptables实现:
 1)当我访问8.8.8.8的1234端口时,将数据包转发给192.168.1.3的1234端口上,只需要在接口服务器上执行:
1
#iptables -t nat -I PREROUTING -p tcp --dport 1234 -j DNAT --to 192.168.1.3:1234

2)如果还想实现“透明代理”,即内网也可以将数据传输至外网,那么再执行:

1
#iptables -t nat -I POSTROUTING -p tcp --dport 1234 -j MASQUERADE

3)查看当前iptables的nat表情况:

1
#iptables –t nat –L

4)删除当前iptables nat表的设置:

1
#iptables –t nat –F
5)开启Linux的路由功能:
 将这条命令查到刚刚配置的iptables命令后面即可,运行命令如下:
1
#echo 1 > /proc/sys/net/ipv4/ip_forward
6)由于iptables的设置在服务器重启后就无效了,所以直接将配置写进/etc/rc.local以便每次启动都恢复我们所需的设置。
 例如,一个实践可用的rc.local内容如下:
1
#!/bin/sh

2
#

3
# rc.local

4
#

5
# This script is executed at the end of each multiuser runlevel.

6
# Make sure that the script will "exit 0" on success or any other

7
# value on error.

8
#

9
# In order to enable or disable this script just change the execution

10
# bits.

11
#

12
# By default this script does nothing.

13
iptables -t nat -I PREROUTING -p tcp --dport 1234 -j DNAT --to 192.168.1.3:1234

14
iptables -t nat -I POSTROUTING -p tcp --dport 1234 -j MASQUERADE

15
 

16
iptables -t nat -I PREROUTING -p tcp --dport 5678 -j DNAT --to 192.168.1.4:5678

17
iptables -t nat -I POSTROUTING -p tcp --dport 2222 -j MASQUERADE

18
 

19
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.5:80

20
iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE

21
 

22
echo 1 > /proc/sys/net/ipv4/ip_forward

23
exit 0

7)上面的rc.local代码中,我分别将接口服务器的1234端口转发给192.168.1.3:1234,5678端口转发给192.168.1.4:5678,80端口转发给192.168.1.5:80,这是可行的。

 
已使用 Microsoft OneNote 2016 创建。