机房内网服务器无外网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的呢?