FTP搭建 共享上网 穿透内网外网

1、ftp原理介绍

FTP只通过TCP连接,没有用于FTP的UDP组件.FTP不同于其他服务的是它使用了两个端口, 一个数据端口和一个命令端口(或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

主动模式(port):

主动模式下,FTP客户端从任意的非特殊的端口(N > 1023)连入到FTP服务器的命令端口--21端口。然后客户端在N+1(N+1 >= 1024)端口监听,并且通过N+1(N+1 >= 1024)端口发送命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,比如20端口。

以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:

  • FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
  • FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
  • FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)
  • FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)

被动模式(pasv):

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

  在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >; 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P >; 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

         对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

    • FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)
    • FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)
    • FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定的任意端口)
    • FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)

总结:

主动FTP:
     命令连接:客户端 >1023端口 -> 服务器 21端口
     数据连接:客户端 >1023端口 <- 服务器 20端口

  被动FTP:
     命令连接:客户端 >1023端口 -> 服务器 21端口
     数据连接:客户端 >1023端口 -> 服务器 >1023端口

2、ftp应用说明

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

基础知识链接:https://www.cnblogs.com/xiaohh/p/4789813.html

3、被动模式配置

FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在 动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通 过另外一个数据端口把东西传给客户端,可以理解为服务端主动给客户端传输文件;在被动模式下:客户端给服务器端的21端口发命令说,我要 下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,可以理解为服务端被客户端拿走了东西

在很久以前(我也不知道多久),地球上还没有什么共享上网这种技术,但是后来出现了,所以也就有了下面的问题,大家都知道,共享上网就是很 多台电脑共享一个公网IP去使用internet,再打个比喻吧,某个局域网共享210.33.25.1这个公网IP上网,当一个内网用户 192.168.0.100去访问外网的FTP服务器时,如果采用主动模式的话,192.168.0.1告诉了FTP服务器我需要某个文件和我打开了x端 口之后,由于共享上网的原因,192.168.0.1在出网关的时候自己的IP地址已经被翻译成了210.33.25.1这个公网IP,所以服务器端收到 的消息也就是210.33.25.1需要某个文件并打开了x端口,FTP服务器就会往210.33.25.1的x端口传数据,这样当然会连接不成功了,因 为打开x端口的并不是210.33.25.1这个地址,在这种情况下被动模式就有用了,相信大家已经能够理解被动模式是怎么个连接法了吧。

  在主动模式中,FTP的两个端口是相对固定的,如果命令端口是x的话,那数据端口就是x-1,也就是说默认情况下,命令端口是21,数据端口就 是20;你把命令端口改成了123,那么数据端口就是122。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂 不是不能正常使用FTP了,这样还是不行,一定需要被动模式。

基于共享上网模式,只能使用被动模式。该案例中,被动模式命令端口:21,数据端口:18001-18002,一共服务端需要做3个端口映射。

原文地址:https://www.cnblogs.com/tiandi/p/9194137.html

时间: 2024-10-07 22:09:12

FTP搭建 共享上网 穿透内网外网的相关文章

双网卡,内网,外网同时上网的设置

网卡配置: ======== Wan: IP: 自动获取IP地址 LAN: IP: 10.203.168.222子网掩码:255.255.225.0默认网关: 空 注意:   内部网的网卡IP配好后,设网关设置为空(即不设网关)   只设IP地址和子网掩码 --------------------------------- 1. route delete 0.0.0.0 删除0.0.0.0这条路由,因为接了两个网段有那个0.0.0.0的路由, 会发生冲突,数据包不知道该往哪边发,即使偶尔能上网,

vmware虚拟机网络配置(物理机能用ssh连接虚拟机, 虚拟机能共享物理机网卡上外网)仅主机模式,nat模式应该也可以

1.环境: 物理机:windows7 虚拟机:centos7  ...xx.xx.x 虚拟化软件:vmware 13 2.准备阶段: vmware安装centos操作系统(easy),网卡地址简单配置,虚拟网卡连接方式先设置为“仅主机模式”. 3.物理机配置 在物理机win7中, win+r,  services.msc,  找到windows firewall 服务,启动防火墙: 在物理机win7中, 打开“网络和共享设置”,适配器设置,如果物理机用的是无线网卡上网,就在“无线网络连接”选中属

如何使用单机单网卡实现公司内、外网访问

在我所将要实施的一个项目中,某公司内部有两套网络系统实现内.外网的物理隔离,员工访问内.外网时使用的双网卡隔离器来切换实现上不同的网络.而随着业务和科技的进步,用户需要布署一套桌面云系统,用桌面云来打造内.外网络,在前端使用云终端一体机来连接桌面云服务器登陆桌面访问.这样一来就会产生很多问题: 1.因用户前期在将要布署桌面云系统的每个云终端位置只布置了一根网线,不是象其它公司要使用内.外网络都是在每个终端前布两根网线来切换不同网络. 2.云终端一体机上也只有一个网口,无法实现双网口隔离访问内.外

win10内网外网智能访问

当电脑同时连接有线和WiFi时(有线连接为内网,WiFi为外网),会出现内网和外网内容无法同时访问的情况. 本方法实现内网和外网的同时访问. 第一步: 输入指令 “route print ” 查看路由表: 第二步: 输入“route delete 0.0.0.0” 删除默认路由: 第三步: 输入“route add 10.0.0.0 mask 255.0.0.0 10.1.9.1” 添加路由: 输入“route add 0.0.0.0 mask 0.0.0.0 192.168.199.1” 添加

C#获取本机内网外网IP

using System.Net; # region 获取内.外网Ip /// <summary> /// 获取本地ip地址,优先取内网ip /// </summary> public static String GetLocalIp() { String[] Ips = GetLocalIpAddress(); foreach (String ip in Ips) if (ip.StartsWith("10.80.")) return ip; foreach

C#获取本地IP地址,内网+外网方法

1 #region 获取内.外网Ip 2 3 /// <summary> 4 /// 获取本地ip地址,优先取内网ip 5 /// </summary> 6 public static String GetLocalIp() 7 { 8 String[] Ips = GetLocalIpAddress(); 9 10 foreach (String ip in Ips) if (ip.StartsWith("10.80.")) return ip; 11 for

配置windows路由表,使电脑同时连接内网外网方法

1.环境一(系统:windows xp,内网.外网不是同一类地址,内网地址固定): 外网:通过笔记本的无线网卡连接: 内网:通过笔记本的本地连接: 第一步,连接网线,配置本地连接地址,注意IP地址不要与其它在用ip冲突: 下图,本地连接配置10.9.1.189的内网地址. 外网地址,则由笔记本的无线网卡连接到路由器,自动获得的p地址,本机获得的IP地址为192.168.1.115. 现在测试,内网可以ping通其它任意主机,外网也连接,但打开浏览器,不能上网: 如果拔掉网线,外网就可以上网. 第

怎么在自己电脑上搭建一个服务器,以便于外网访问呢?

前几天我要测试一个项目,这个是需要往服务器上放才可以测的,但后台太忙了,所以就说让我自己在自己电脑搭建个服务器,把项目代码放在里面测就可以,其实搭建服务器的方法有很多,之前我有用过一个XMAPP的软件它也是可以作为服务器承载代码,以供别人访问,不过我觉得比较流行的还是Tomcat服务器: 其实我们偶尔也会写一下网页,javaweb程序,为了逼近现实,我们的项目发布后,都希望我们的项目能让更多的人看到,难道我们要自己去买域名么,买空间么?其实我个人觉得如果不是需要很大的持续的访问量的话,完全没有必

使用Nexus搭建Maven私服--【不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址】

一.搭建nexus私服的目的 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库. 1.1.Nexus架构 二.nexus私服的下载和安装 2.1.nexus下载 去下载最新版本的nexus,下载地址:http://www.sonatype.org/nexus/go