首页 > 代码库 > iptables 共享上网 (NAT表的使用)

iptables 共享上网 (NAT表的使用)

机房内网服务器无外网IP上不了网怎么办?

比如,机房有A B 两台服务器,A有外网IP地址,B没有外网IP地址,那B如何上网呢?

思路就是,把B的网关指向A服务器的内网地址,通过A服务器代理上网


iptables的高级应用 共享上网

举例如下:

网关服务器B:

ech0 10.0.0.51    外网地址   配上级网关

ech1 172.16.1.51  内网地址   不配网关

内网服务器C:

ech1 172.16.1.52 网关172.16.1.51


网关服务器B需要具备的条件

1 物理条件是双网卡,一块内网地址,一块外网地址

2 确保服务器网关B可以上网

3 内核文件/etc/sysctl.conf要开启转发功能

net.ipv4.ip_forward = 1

sysctl -p #使修改生效

4 iptables 的filter表的forward链允许转发

网关服务器的IPTABLES默认规则最好是ACCEPT


服务器C需要具备的条件

1 服务器C的默认网关是服务器B的内网地址

route -n

route del default gw 172.16.1.8

route -n

route add default gw 172.16.1.51


在网关服务器B上配一条规则允许服务器C上网

网关服务器B

1 载入内核模块

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state


2 局域网共享的两条命令方法:

实现原理把服务器C的内网地址转换成网关服务器的外网地址,相当于是数据包到达网关B,再从B发出 ,好像数据包是B发出去的一样

方法1 :适合于有固定外网地址的:

iptables -t nat -A POSTROUTING  -s 172.16.1.52 -o eth0 -j SNAT -to-source 10.0.0.51

-A POSTROUTING 因为是离开防火墙去网关B服务器,所以用 POSTROUTING链

-s 172.16.1.52 服务器C的内网IP地址,可以改成网段 -s 172.16.1.0/24

-o eth0 网关服务器B的外网卡接口/可写可不写

-j SNAT -to-source 10.0.0.51 源地址转换成网关服务器B的外网卡IP地址

ping 203.81.19.1  测一下


方法2:适合变化的外网地址(ADSL)

iptables -t nat -A POSTROUTING  -s 172.16.1.52 -j MASQUERADE (伪装)


我用语言来描述一下这个过程:

假设服务器C172.10.1.52 要访问百度1.1.1.1(假设的地址) ;先是ARP内网广播,没人响应后去找网关,到了网关后,因为做了源地址转换,把服务器C的内网地址换成了网关服务器的外网卡地址,这样,网关服务器的外网卡地址就能找到百度的1.1.1.1,这样,服务器C就能上网了


地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。


有个疑问,包是出去了,那包回来是怎么找到服务器C的呢?


本文出自 “青春邓勇” 博客,请务必保留此出处http://dengyong.blog.51cto.com/8409869/1853420

iptables 共享上网 (NAT表的使用)