新闻资讯

如何把主机变成一个路由器?怎么做端口映射?

2018-12-18

之前呢,我做很多实验都是关闭了防火墙,因为怕有影响,今天呢,我们要利用防火墙的一些功能实现主机路由和端口映射。后面也会讲一些关于squid的内容,但是主要讲一下squid的缓存机制和反向代理的功能。本人网络知识学的确实有点屁,所以有毛病的地方希望大家指出,我也会在以后恶补一下网络知识的,我感觉这个还是很重要的。

开班第三十五天:

今天的课程大纲:

把主机做成一个路由器

实现端口映射

squid的缓存机制

squid的反向代理功能

详细讲解:

一。把主机做成一个路由器

对于路由器大家应该是再熟悉不过了,那么简单路由器的功能说白了就是互连局域网和广域网。路由器一般都有两张网卡,一个对外的,一个对内的,别的不说了,我就简单的在本机上实现一个功能,来解释一下路由器。

有这样一个场景,我现在虚拟机不是用nat上网,我使用的是host-only方式,这样我的虚拟机是无法上网的,但是可以跟本机相连。那么我要想实现虚拟机上网,我本机是不是应该转发虚拟机发出的数据包到家庭真实路由器上。之后的转发就是路由器那边的事情了。这样我本机其实就充当了一个路由器的功能。下面是实现的步骤。

1.改变虚拟机的连接方式为host-only,然后查看我的vmnet1网段为172.16.70.0,那么我设置虚拟机的ip地址为172.16.70.3。

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 2.本机的内核参数要开启转发功能。修改/etc/sysctl.conf ,改net.ipv4_forward=1

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 3.现在开启防火墙filter表中FORWARD链的转发功能。默认是拒绝的,为了方便,我们直接删除最后一条规则就行了。iptables -D FORWARD 1.然后保存重启一下就行了。

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 4.既然我的虚拟机的ip地址是172.16.70.3,那么我们现在需要做的就是在本机防火墙上添加一条规则,使得172.16.70.3的数据包经过本机172.16.70。1然后本机转发出去给本机上网的ip地址192.168.199.116。那么这样我们的虚拟机就可以走路由上网了。

下面的规则是什么意思呢,就是说源地址是172.16.70.0网段的,而且目的地址不是局域网内的,我都伪装转发出去,MASQUERADE意思为伪装,其实就是一种动态的源地址转换。

5.添加好规则之后,查看虚拟机的路由表,看是否有172.16.70.1这条路由,如果有就可以添加dns测试了,如果没有自己手动添加一条默认路由。

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 6.测试,我们就ping百度吧,其实严格来讲ping还是有点缺陷的,不过现在暂时不装图形界面。这样我们就实现了虚拟机上网,同时实现的功能就是本机作为了一个路由器。

二。实现端口映射

端口映射,其实也可以说是端口转发,说的通俗一点就是,路由器的外网ip地址映射到主机的某个端口上,然后别人访问外网ip和端口的时候其实就是访问我的主机ip和端口。记住转发出去的包要修改目标地址,回包要修改源地址。

这里我就模拟一个场景,我要实现这样一个功能,当有人访问我的本机的ip地址192.168.199.116,那么它实际访问的是我的虚拟机172.16.70.3.那我们现在需要做的工作就是访问目标地址为116的目标地址转换为3,回包需要把源地址修改成116,在返回给别人。

1.根据刚才讲的,我们先设置别人访问发进来的包。

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 2.现在设置回的包

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 3.保存规则,重启防火墙,然后进行测试,如果成功,那么我远程ssh连接116,最终连接的是3.

三。squid的缓存机制

本来想讲一下squid非常重要的缓存机制的,但是感觉自己准备的不是很充分,所以我明天做做笔记,整理一下,再给大家补充squid的缓存机制。

四。squid的反向代理功能

squid的反向代理功能,也是squid这个软件很重要的一个功能,它的反向代理是怎么实现的呢,其实很简单,squid修改监听端口为80端口,然后用户访问代理的时候,代理会把请求通过自己的调度算法来分配到下面的web服务器上。

利用squid作为反向代理其实其实真实的生产环境中不多,因为nginx本身就可以作为反向代理,但是squid的好处就在于有缓存机制,但是它的缓存机制又不像varnish那样专一,不管怎么说,各有千秋吧,缓存机制明天讲,但我还是说一下,我们平时常说的CDN就是这样一种存在,具体的大家可以先去了解一下CDN。

我现在模拟这样一个场景(发现我很喜欢模拟场景),我的两个虚拟机vm1(172.16.70.3)和vm2(172.16.70.4)使用nginx作为web服务器,我的真实机master(192.168.199.116)作为squid反向代理。最后我用其他电脑进行测试访问。

1.先配置两个虚拟机的web服务,具体我就不说了,看看效果吧。我通过访问域名www.toutiao.com 来实现两个虚拟机的访问。

2.现在开始配置本机的squid的代理。设置squid监听端口为80,原来是3128。添加反向代理功能,修改http_access为allow all,最后添加调度的对象和规则。如果没有squid直接安装yum install squid。

《第35天》把自己的主机做成一个路由器,以及实现端口映射功能 3。为了测试,现在访问你代理的人需要把www.toutiao.com 这个域名和你代理的主机名添加在hosts文件中,然后别人访问这个域名就会访问到我虚拟机中的两个web服务器,注意,开启了防火墙,那么你代理的防火墙就应该允许他人通过tcp80端口访问。

我们使用命令lynx --reload -dump www.toutiao.com 来访问,这样看的效果比较明显一点。如下图,根据调度的算法,我们第一次访问交给了vm1,第二次交给了vm2,这样来回循环。这样减轻了一台服务器的压力。

总结:

今天主要讲了本机做路由以及端口映射的知识,最后还补充了一点squid作为反向代理的知识,我个人认为网络知识非常重要,所以我也希望大家能够好好的学习或者深入学习网络知识,没有坏出的。

花生壳是一个动态域名解析软件,支持端口映射和内网穿透,从2006年面世起十年间累计为全球1450多万用户提供动态域名解析服务。2016年5月,全新改版客户端花生壳3.2发布,以颠覆式的NAT-DDNS创新技术、全新的交互界面及功能体验,搭配Web、微信远程管理,全面满足广大用户的多元化需求。