iptables之NAT代理-内网访问外网

1、前言

本文使用NAT功能:内网服务器,想上网又不想被攻击。

工作原理:
内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应。由于源主机ip是私有的,禁止在公网使用,所以必须将数据包的源发送地址修改成公网上的可用ip,这就是网关收到数据包之后首先要做的工作--ip转换。然后网关再把数据包发往目的主机。目的主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,也没必要知道,目的主机处理完请求,把回应信息发还给网关。网关收到后,将目的主机发还的数据包的目的ip地址修改为发出请求的内网主机的ip地址,并将其发给内网主机。这就是网关的第二个工作--数据包的路由转发。内网的主机只要查看数据包的目的ip与发送请求的源主机ip地址相同,就会回应,这就完成了一次请求。

出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。

语法和端口转发规则:

DNAT:目标地址转换

SNAT:源地址转换

 

 本次部署由服务端和客户端两部分构成:

       服务端主机:eth0:10.0.0.61    eth1:172.16.1.61

       客户端主机:eth1:172.16.1.51

说明: 10.0.0.1/24网段是外网IP;172.16.1.0/24是内网IP网段。

2、服务端部署(ip:10.0.0.61、172.16.1.61)

a、开启ip路由转发功能

#临时开启方法:
echo "1" > /proc/sys/net/ipv4/ip_forward #该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。
#永久开启方法
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

b、添加SNAT规则

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61

c、iptables保存规则

service iptables save            
/etc/init.d/iptables restart
设置开机启动
chkconfig iptables on

3、客户端配置(ip:172.16.1.51)

a、添加转发IP(172.16.1.61)为网关

第一种方法:
echo -e 'DNS1=223.5.5.5\nDNS2=223.6.6.6\nGATEWAY=172.16.1.61' >> /etc/sysconfig/network-scripts/ifcfg-eth1
重启网卡
/etc/init.d/network restart

第二种方法:
route add default gw 172.16.1.61

b、测试上网是否正常

查看路由表是否有设置的网关
[root@db01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.1.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         172.16.1.61     0.0.0.0         UG    0      0        0 eth1

ping测试网络连通性
[root@db01 ~]# ping www.baidu.com
PING www.a.shifen.com (111.13.100.92) 56(84) bytes of data.
64 bytes from 111.13.100.92: icmp_seq=1 ttl=127 time=11.4 ms
64 bytes from 111.13.100.92: icmp_seq=2 ttl=127 time=7.09 ms
64 bytes from 111.13.100.92: icmp_seq=3 ttl=127 time=6.59 ms

 

给自己看的注意事项。

注:模拟测试时,多块网卡测试注意事项

需关闭上网的网卡,再进行功能测试

sed -i 's#ONBOOT=yes#ONBOOT=no#g' /etc/sysconfig/network-scripts/ifcfg-eth0

 

posted @ 2017-11-05 21:15  沉心十年  阅读(5384)  评论(1编辑  收藏  举报