<!DOCTYPE html>
Linux iptables NAT 透明代理教程
Linux iptables NAT 透明代理教程
Wednesday, July 9, 2014
3:40 PM
Linux iptables NAT 透明代理教程
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 创建。