1. 正常情况一个内网主机与外网服务器的交互 以访问google为例 假设我们的主机IP是192.168.0.10,路由器LAN IP为192.168.0.1,WAN IP为211.22.145.234(这是一个公网IP), google 服务器 IP 为74.125.204.101。 1.主机构建HTTP请求数据包,目标IP为74.125.204.101,目标端口是80/443,源IP为192.168.0.10,源端口随机生成,假定为5000 2.主机检查目标IP地址,发现不在一个网段,数据包丢给默认网关192.168.0.1 3.路由器LAN口收到数据包,构建NAT映射,随机生成端口,假定为5500,这样映射就是:5500->192.168.0.10:5000. WIN口收到的数据包,如果目标端口是5500,则会转发给192.168.0.10的5000端口 4.路由器修改数据包的源端口为5500,源IP地址为211.22.145.234,使用WAN口将数据包发出去 5.google服务器收到请求,构建响应HTTP数据包,目标IP地址为211.22.145.234,目标端口是5500 6.路由器WAN口收到数据包,目标端口是5500,查询NAT表,发现对应的机器是192.168.0.10:5000, 所以修改目标IP为192.168.0.10,目标端口为5000,并通过LAN口发送给主机 7.主机收到数据包,完成一次通信 2. 内网穿透实现 测试服务器没有公网IP,想要让外网直接调用内网的服务,就需要用到内网穿透. 和使用路由器与外网交互类似,需要有一个第三方拥有公网IP的服务器进行路由的中转,代替路由器的角色. 由内网服务器主动请求公网服务器,建立一个长连接,这时公网服务器就可以随时随地的向内网服务器发送消息了 当使用浏览器想要访问内网服务时,先将请求发送到公网服务器上,公网服务器再通过之前建立的长连接将请求发送到内网服务器中。 从而实现在外网请求内网服务的需求 3. 公网服务器设置 # wget https://github.com/fatedier/frp/releases/download/v0.14.1/frp_0.14.1_linux_amd64.tar.gz # sudo tar zxf frp_0.14.1_linux_amd64.tar.gz # cd frp_0.14.1_linux_amd64/ # sudo vim frps.ini # [common] bind_port = 8989 # frp服务的端口 vhost_http_port = 8889 # frp的http服务的端口 # 启动服务 # ./frps -c frps.ini # 前台直接启动,测试看日志方便 # nohup ./frps -c ./frps.ini > /dev/null 2>&1 & # 后台运行 4.……

阅读全文