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的呢?

时间: 2024-10-05 07:15:31

iptables 共享上网 (NAT表的使用)的相关文章

Linux学习(二十九)iptables(三)nat表的应用

需求 A机器可以访问外网,B机器和A机器处于同一个内网,现在要让B机器通过A机器访问外网. 步骤 1.为虚拟机添加一块网卡. 如果没有区段名称的话,点击'LAN区段(S)...'按钮,新建一个. 2.ifconfig -a命令可以看到刚添加进来的尚未启用的网卡: [[email protected] ~]# ifconfig -a eth1 Link encap:Ethernet HWaddr 00:0C:29:AC:CC:56 inet addr:192.168.182.130 Bcast:1

Linux服务器集群架构部署搭建(二)linux防火墙iptables使用及NAT共享

第一章 外网防火墙部署企业应用 1.1 生产中iptables的实际应用 ①iptables是基于内核的防火墙,功能非常强大,基于数据包的过滤!特别是可以在一台非常低的硬件配置下跑的非常好.iptables主要工作在OSI七层的2.3.4层.七层的控制可以使用squid代理+iptables. ②iptabes:生产中根据具体情况,一般,内网关闭,外网打开.大并发的情况不能开iptables,影响性能,iptables是要消耗CPU的,所以大并发的情况下,我们使用硬件防火墙的各方面做的很仔细.s

iptables filter表案例及iptables nat表应用

iptables小案例: 只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.1.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口. 由于这个需求有多条规则,所以最好写成脚本的形式,操作示例如下: vi /usr/local/sbin/iptables.sh 加入如下内容,保存退出. 脚本内容: ipt="/usr/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OU

73.fileter表案例,NAT表的应用

fileter表案例 要求如下:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.204.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口.这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式.脚本内容如下[email protected] ~]# cat /usr/local/sbin//iptables.shcat: /usr/local/sbin//iptables.sh: 没有那个文件或目录[[email pr

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 扩展 iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html iptables限制syn速率 http://www.aminglinux.com/bbs/thre

iptables 做网关共享上网IP多对多映射

iptables做网关共享上网IP多对多映射 iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.240 -o eth0 -j SNAT --to-source 124.42.60.118-124.42.60.162    #这样的话就有了五个外网IP ,是负载均衡的 如果全映射成一个外网IP,容易被封且一个IP的端口是有限的,65535个端口

用iptables做软路由实现共享上网

我们平时使用的大多数家用路由器都是通过NAT(Network Address Translation,网络地址转换)功能实现共享上网的,iptables是linux内核里整合的一个ip信息包过滤系统,使用iptables配置nat就可以实现和家用路由器一样的上网效果. 环境:两台电脑,都是centos6的系统,其中一台能上网,一台不能上网,两台电脑通过内网相连. A电脑:外网(eth0) ip为192.168.1.1,内网(eth1) ip为10.1.1.1.1 B电脑:内网(eth0) ip为

十(4)iptables语法、iptables filter表小案例、iptables nat表应用

                                    iptables语法 filter表: INPUT链:作用于进入本机的包 OUTPUT链:作用于送出本机的包 FORWARD链:作用于和本机无关的包 nat表: PREROUTING链:作用是包在刚刚到达防火墙时改变包的目标地址 OUTPUT链:改变本地产生的包的目标地址 POSTROUTING链:作用是在包将离开防火墙时改变包源地址 1.查看iptables规则 iptables -nvL  (此时默认查看filter表,

七周四次课 iptables filter表案例以及iptables nat表应用

iptables小案例将80端口,22端口和21端口放行,22端口需要指定IP段,只有指定IP段访问才可以.其他段一概拒绝.我们可以用一个脚本来实现. #!/bin/bashipt="/usr/sbin/iptables"ipt是定义了一个变量,如果要执行命令,要写全局绝对路径,这样在脚本当中才不会因为环境变量问题导致命令无法执行.所以以后路写shell脚本时一定要写全局绝对路径.我们来定义一个变量,目的就是后面有许多的地方要加载它,如果写很长一段命令会很繁琐.所以我们要定义一个变量,