选择一台电脑(有两个网卡或者用单网卡然后用软件虚拟多一个网卡)充当网关,一个网卡(eth0)连接外网ISP,另一网卡(eth1)连接内网(即局域网)。局域网内的ip地址都是私用地址,只能在内部使用,在公网上是不可见的,所以局域网电脑要上网必须修改ip,这就是网关的工作。
工作原理:
内网主机向公网发送数据包时,由于目的主机跟源主机不在同一网段,所以数据包暂时发往内网默认网关处理,而本网段的主机对此数据包不做任何回应。由于源主机ip是私有的,禁止在公网使用,所以必须将数据包的源发送地址修改成公网上的可用ip,这就是网关收到数据包之后首先要做的工作--ip转换。然后网关再把数据包发往目的主机。目的主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,也没必要知道,目的主机处理完请求,把回应信息发还给网关。网关收到后,将目的主机发还的数据包的目的ip地址修改为发出请求的内网主机的ip地址,并将其发给内网主机。这就是网关的第二个工作--数据包的路由转发。内网的主机只要查看数据包的目的ip与发送请求的源主机ip地址相同,就会回应,这就完成了一次请求。
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。
配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能
less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。可使用命令echo "1" > /proc/sys/net/ipv4/ip_forward 修改文件内容,重启网络服务或主机后效果不再。若要其自动执行,可将命令echo "1" > /proc/sys/net/ipv4/ip_forward 写入脚本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network脚本中添加 FORWARD_IPV4="YES"
iptables
工作原理:iptables是基于内核的工具,根据本机进入和发出的数据所采用的协议、端口、ip地址等来过滤数据,判断数据是否满足iptables所制定的规则。数据包进出网卡都会检查其对应的规则,若不满足规则,则丢弃数据包,而这并不会有任何提示。对应满足规则的数据包,网关会执行对应的操作。
查看是否安装iptables,使用命令rpm -q iptables,安装成功在/sbin下会有iptables命令,在/etc/init.d下有iptables的脚本文件。
iptables至少有三个表(filter、nat、mangle)
默认表为filter,包括三个链
INPUT管理数据包进入主机
OUTPUT管理数据包送出
FORWARD限制转发数据包
nat表专门负责数据包的转发以及ip地址转换。包括三个链
PREROUTING 负责数据包进入主机时修改目的ip地址,比如处理应答数据包
POSTROUTING 负责数据包进入主机后修改源ip地址,比如处理请求数据包
OUTPUT 负责处理本地产生的数据包,做目的ip地址转换
mangle表主要是跟一些特殊数据表的路由标记有关。
iptables常用参数
-t 指定表,若没明确指定,则操作的都是默认表,即filter,-t nat 指定nat表
-F 清除默认表规则
-L 列出规则
-P 定义链的策略,链名大写,语法为iptables -p [ INPUT,OUTPUT,FORWARD ] [ ACCEPT,DROP]
-A 添加规则到链后
-I 插入规则
-D 删除规则
-p 表协议
-s 表源ip,源主机端口用--sport表示
-d 表目的ip,目的主机端口用--dport表示
-i 表接收数据进入的网络接口,即eth0之类的
-o 表发送数据进入的网络接口,即eth0之类的
-j 表当符合规则时,执行的操作,ACCEPT表允许转发;DROP表丢弃数据包;MASQUERADE表进行ip地址转换
例子:
#禁止接收所有数据包
iptables -P INPUT DROP
#允许从eth0网卡进入的udp协议包,并且来自1025以下端口,目的地址为192.168.0.1,访问端口为55的DNS服务
iptables -A INPUT -i eth0 -p udp --sport 1025: -d 192.168.0.1 --dport 53 -j ACCEPT
#对从192.168.0.0到所有ip的数据包进行ip地址转换
iptables -t nat -A POSTROUTING -s 192.168.0.0/25 -d 0.0.0.0/0 -j MASQUERADE
以上所说指的是局域网网访问公网,理论上局域网对公网是不可见的,也不允许公网访问内网,除了网站。
对于公网,其看到的只有网关的公网ip地址,内网提供的所有信息,都是通过网关主机提供获得的。
假设公网通过网关的1111端口访问内网提供的web服务,其iptables规则为
iptables -t nat -A PREROUTING -p tcp -d 210.38.208.228 --dport 1111 -j DNAT --to 192.168.0.30:80
-d 210.38.208.228 --dport 1111 -j DNAT --to 192.168.0.30:80 将网关目的ip地址动态转换为局域网ip地址192.168.0.30
设置好后,在浏览器里输入 就如同在局域网里访问一样
PS:如何让充当网关的主机可以连接到Internet上,一般可以采用的办法用拨号上网、ADSL以及宽带接入。然后设置下DNS服务器
参考网址:
阅读(1758) | 评论(0) | 转发(1) |