默认网关:就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关。

那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。


    PREROUTING:可以在这里定义进行目的NAT(指从外网卡进入到路由的,在路由里的转发规则)的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
如iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 202.110.123.100,
将发往外网地址192.168.1.100(这里一个外网网卡对应的多个ip地址)转发到202.110.123.100
  
    POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。


  OUTPUT:定义对本地产生的数据包的目的NAT规则。


要开的选项:
   Full NAT


   MASQUERADE target support


   REDIRECT target support


modprobe默认会去/lib/modules/<kernel-version>/下面查找module,而insmod只在给它的参数中去找module


  2. 要使用NAT表时,必须首先载入相关模块:


  modprobe ip_tables


  modprobe ip_nat_ftp


比如,更改所有来自192.168.1.0/24的数据包的源ip地址为1.2.3.4:


  iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 1.2.3.4


  这里需要注意的是,系统在路由及过虑等处理直到数据包要被送出时才进行SNAT。

路由转发原理:

路由wan口的ip为192.168.0.218,且wan口所在的局域网服务器的IP地址为192.168.0.1.

lan口设置为192.168.1.2 局域网的掩码为255.255.255.0

则路由要增加一条默认的路由,将所有不是发往本局域网的包都转发到192.168.0.1,其中192.168.0.1这个服务器有DNSHE 转发功能:

route add default gw 192.168.0.1

同时要实现地址转换讲所有从lan口接到的包的源地址改为wan口的地址

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j SNAT --to 192.168.0.218

每个包的信息如下:

1、从局域网发往路由器的包里源mac 和IP地址都是电脑自己的mac地址和IP地址,目的ip为要发往的目的地的IP,但是目的mac地址为路由器LAN口的ip地址。

2、从wan口发出的包中,源ip ,mac地址为wan口的ip和mac地址,目的ip地址和上面相同,但是目的mac地址改为192.168.0.1的地址


iptables相关设置:

# 清空现有规则

iptables -F

# 对于外网(WAN)到内网(LAN)的封包,至允许那些回应包
iptables -A FORWARD -i eth0 -o eht1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# 对于所有内网(LAN)到外网(WAN)的封包都予以放行
iptables -A FORWARD -i eht0 -o eth1 -j ACCEPT

#启用转发日志
iptables -A FORWARD -j LOG

# 启用IP伪装,使得内网中所有转发出去的封包都是Linux服务器一台机子发出的
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# 启用地址转换(NAT)将内网的Web服务映射到外网的特定端口上,这就是端口映射
iptables -A PREROUTING -t nat -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.2:8080

这里192.168.0.2是内网web服务器的ip地址,8080是端口号,将其映射到路由wan口上的8080端口上