ftp文件传输

ℹ️本篇导读

全篇四段:理论(FTP 原理与 FTPS/SFTP/WebDAV 替代方案速览)→ 实践(局域网入手:FileZilla Server 第三方路线)→ 尝试公网共享(结合内网穿透)→ 设想局域网相连。Windows 原生 IIS 搭 FTP 的另一条路线见 windows搭建ftp服务器;局域网媒体共享(SMB,445 端口)见 Windows 原生全能服务器搭建笔记

ftp文件传输

理论

FTP(文件传输协议)是一种用于在网络上传输文件的标准网络协议,广泛用于上传和下载文件。除了基本的上传和下载功能,FTP还有以下特性和功能:

用户认证: FTP可以提供用户认证机制,只有经过验证的用户才能访问服务器,可以设置匿名访问或要求用户名和密码。

目录浏览: 用户可以列出FTP服务器上的目录和文件,这样可以浏览服务器上的文件结构。

文件操作: FTP允许用户对文件执行各种操作,如重命名、删除、移动和复制。

断点续传: 如果文件传输中断,FTP允许从中断的地方重新开始传输,这对于传输大文件特别有用。

传输模式: FTP支持不同的文件传输模式,如ASCII模式用于文本文件,二进制模式用于二进制文件和其他数据类型。

被动和主动模式: FTP客户端可以使用被动模式或主动模式来建立数据连接,这有助于在客户端或服务器位于防火墙后面时完成文件传输。

带宽控制: FTP允许限制数据传输速率,避免占用全部网络带宽。

脚本和自动化: FTP支持脚本化的访问和操作,可以通过脚本自动化上传和下载任务。

加密: 通过FTPS(FTP Secure)和SFTP(SSH File Transfer Protocol)可以增加传输过程中的数据加密,保护数据不被截获。

尽管FTP是一个成熟的技术,它在互联网的早期非常流行,但由于安全性的考虑,现在通常建议使用更安全的替代方案,如SFTP或FTPS,或者完全不同的文件传输解决方案,如WebDAV或基于HTTPS的文件共享服务。

实践

根据上面的描述 发现ftp最实用的地方就在于文件共享

在之前也使用p2p(tailscale+resilio sync)实现了文件共享 但是它得各设备都安装客户端软件sync才能实现 好处是不需要用一台设备常驻当服务器

ftp只需要在一台设备上搭建ftp服务器 其他设备直接使用ftp://ip+port即可实现文件共享 较使用者来说是更方便些的

那么 理论成立 开始实验

局域网入手

先从局域网入手 (已有设备:台式机 笔记本 路由器)

背景是这几个:我的台式机和笔记本通过路由器连接在了一个局域网内 台式机的内网ip为192.168.31.49 笔记本的内网ip为192.168.31.194 将我本地的台式机搭建成ftp服务器 端口号设为2121(ftp默认端口号为21 为避免冲突 这里多加个21) 目标是在笔记本中 通过ftp://192.168.31.49:2121实现访问这个共享文件夹

首先在台式机中配置ftp服务器 下载filezila sever

台式机(服务器端)安装filezilla sever

image-8f7cb3de

上图展示的是FileZilla Server在安装过程中关于服务设置的选项

这里有两个主要选项:

Install as service, started with Windows (default): 这个选项会将FileZilla Server安装为Windows服务,并且会在Windows启动时自动启动FileZilla Server。这是推荐选项,因为它确保了FTP服务器在系统重启后仍然运行,无需手动启动。

Start server after setup completes: 如果勾选这个选项,安装完成后立即启动FileZilla Server。这可以让你立即开始配置和使用FTP服务器。

对于服务运行账户,有两个选项:

Run service under the SYSTEM Windows user account: 这个选项将使用系统账户运行服务。系统账户具有广泛的权限,不建议在安全性要求高的环境中使用。

Run service under a different Windows user account: 如果希望服务以更受限的权限运行,可以选择这个选项,并指定一个具有较少权限的用户账户。这可以提高安全性,特别是如果你的FTP服务器将公开到互联网。

根据需要选择 如果不确定,建议使用默认选项:

选择“Install as service, started with Windows (default)”。

如果希望在安装后立即开始使用FileZilla Server,可以勾选“Start server after setup completes”。

通常,使用“Run service under the SYSTEM Windows user account”就足够了,除非有特别的安全需求。

选择完成后,点击“Next”继续安装过程。

一路next到最后一步:配置用于管理员接口的监听端口和管理员密码

image-3b4de311

Choose the listening port for the administration interface (1025-65535):

  • 这里需要选择一个端口号,用于FileZilla Server管理界面的通信。默认端口是14148。除非该端口已经被系统中的其他服务使用,否则通常可以保留默认值。

Choose the administration password:

  • 在这里,需要设置一个管理员密码,您将用它来访问FileZilla Server的管理界面。为了系统的安全,确保选择一个强密码,它应该包含大小写字母、数字和特殊字符的组合。

Retype the chosen password:

  • 重新输入您选择的密码以确认。

设置好以上信息后,点击“Next”继续完成安装。确保记住所设置的管理员密码,因为在管理FileZilla Server时会需要用到它。

弹出弹窗——

image-defa4759

显示FileZilla Server为管理界面生成的TLS(传输层安全性)证书的指纹。TLS证书用于在服务器与客户端之间建立一个加密的连接,指纹用来唯一标识这个证书。

尝试通过安全的方式(如FTPS)连接到FileZilla Server时,客户端可能会显示证书指纹,并要求验证它以确保你正在连接到你期望的服务器,而不是一个中间人攻击者。这是一个安全措施,帮助防止“中间人攻击”(MITM)。

应该做的是:

记录或保存这个指纹信息。可以将其复制粘贴到文本文件中,或者打印出来存放在安全的地方。

当用户使用FTP客户端首次连接到服务器时,你可以检查客户端显示的服务器证书指纹是否与这里记录的匹配。如果匹配,那么可以信任这个连接是安全的。

点击“确定”以继续安装过程。

此步骤是确保在后续的连接中,您能够验证服务器身份的一个重要安全措施。如果是在个人或内部网络中使用FileZilla Server,这个步骤可能不是绝对必需的,但仍然是一个好习惯,特别是在计划通过互联网访问FTP服务器时。

得到这个界面

image-d2548f65

点击连接

得到这个界面

image-843bdb59

这并不是设置其他电脑访问的ip+port 而是内部管理界面连接

填写"127.0.0.1"和端口"14148"后,实际上在做的事情是:

建立管理连接:使用管理界面连接到在同一台机器上运行的FileZilla Server。这允许你配置服务器,例如设置用户权限、创建FTP账户等。

端口:"14148"是FileZilla Server默认的管理端口,用于通过管理界面与FTP服务器通信。

密码:输入安装FileZilla Server时设定的管理密码

保存密码:选择是否保存密码以便下次自动登录

自动连接:可以选择让管理界面在启动时自动连接到FTP服务器

此时正处于设置服务器管理界面的阶段,一旦连接成功,就可以进一步配置FileZilla Server,如设置用户账户、文件夹权限、端口使用等

接下来才是设置要共享的文件夹以及其他设备的访问入口

image-a2925142 image-176c0d57

警告信息的大意是在设置本地路径(即用户的FTP访问路径)时需要特别注意

这里有几个要点:

确保路径存在:在您为FTP用户设置本地目录时,确保该目录实际存在于您的服务器上。如果路径不存在,FTP服务可能无法正确导航到该目录,导致连接问题。

创建路径的权限:如果您希望FTP服务在路径不存在时自动创建目录,请选择“Create native directory if it does not exist”选项。这样,如果您指定的路径不存在,FTP服务将会尝试创建它。

在FTP协议中,通常使用“匿名”(anonymous)账户允许任何人访问FTP服务器而无需个人登录凭据

image-ed999ec6

设置匿名用户的权限和路径

用户名选择为“anonymous”:这是标准的FTP匿名访问用户名。

勾选“Do not require authentication”:这样设置后,用户不需要密码即可登录。

添加Mount Points:点击“Add”,然后设置一个虚拟路径(通常为‘/'表示根路径),并映射到一个实际存在于服务器上的目录(即Native Path)。

  • 注意:请确保服务器上该路径确实存在,或者勾选“Create native directory if it does not exist”让服务器自动创建。
image-2d636457

设置匿名用户的IP过滤

  • 如果您想限制匿名用户只能从特定的IP地址访问,您可以在“Allowed IP ranges”中添加这些范围。如果您希望允许任何IP访问,那么这里可以不作更改。
image-ec0769e2

设置匿名用户的速度和数量限制

  • 这里可以设置限制条件,防止匿名用户占用过多带宽或创建太多会话。如果不想设置任何限制,可以保持默认值(通常为“Unlimited”)

在设置完成后,点击“OK”或“Apply”保存您的配置。设置完毕之后,就能够通过FTP客户端软件测试匿名访问,只需要输入服务器的IP地址,用户名为“anonymous”,无需密码,就能够访问指定的共享文件夹

服务器端配置完成 现在尝试在笔记本(客服端)进行访问

笔记本(客户端)访问

在台式机上 win+r cmd 输入ipconfig得到服务器的ip地址

image-dbfa1302

在笔记本中 打开文件管理器 输入ftp://192.168.31.49:2121

初次登入会显示

image-38389924

直接选匿名登入即可

之后就是测试连通性

在笔记本上新加一个文件进去 服务器可以立即同步更新 但是在服务器上做出什么修改 笔记本并不会立即更新 需要手动右键进行刷新 至于两台客户端上同步有多快 就没做测试了

总之实验是成功的

然后就是考虑 怎么能实现公网也文件共享呢

因为原本p2p就已经满足了我文件共享的需求 现在来弄一个重复操作 还得让台式机一直开启服务才可以持续共享 方便性可能不是那么高

要是可以突破局域网限制 能在机房或者其他地方 直接输入而无需安装客户端做一系列配置 就可以直接实现文件共享 那这个实验才具有现实意义

尝试公网共享

起初是想借用路由器端口转发的形式 利用路由器作为出口

emmm 想来还是有点蠢 很明显不可行 还试了那么久

做了什么呢 也记一下吧

image-6f6d03db

首先在路由器后台处 设置端口转发

image-28cbb305

大概就是 路由器收到的来自公网对2121端口的请求 会转发到它内部的我这台台式机(192.168.31.49)上的2121端口

然后在https://www.whatismyip.com/ 上查询自己所在的公网ip

image-a495ad85

接着在https://www.yougetsignal.com/tools/open-ports 上查询该公网ip的2121端口是否开启

image-336a1532

显然是不成功的 显示了closed

又换了一种DMZ的方式 因为看到下面的描述好像符合我的情景

image-5e30f549

这个我不太了解 以下是一些概念:

DMZ(Demilitarized Zone,非军事区)是网络安全中的一个概念,它允许您指定一个局域网内的设备(如您的FTP服务器),使其能够被公网上的所有端口访问,而不需要为每个端口单独设置端口转发规则。这样,该设备上的所有端口都会暴露给公网。

开启DMZ功能并指定您的FTP服务器IP通常是一个快速确保公网访问的方法,但是它也极大地增加了安全风险,因为它会暴露您的服务器上的所有服务和端口。

如果决定使用DMZ,请确保:

服务器上运行的所有服务都是安全的,且已经更新到最新版本。

服务器上安装并配置了强力的防火墙。

仅作为临时解决方案,在问题确定并解决后,关闭DMZ。

如果希望尝试使用DMZ,请按照以下步骤操作:

在DMZ设置中开启DMZ功能。

在提供的字段中输入您FTP服务器的内网IP地址(在您的案例中是 192.168.31.49)。

保存并应用设置,有的路由器可能需要重启。

使用公网IP地址再次尝试访问FTP服务器。

请记住,启用DMZ通常不建议用作长期解决方案,因为它会使网络安全降低。在解决端口转发问题之前,只建议临时使用DMZ功能

但是 结果还是和上面一样 公网ip下的2121端口无法访问

问题应该出在isp未开启入口 或者我的路由器本身就是存在于校园网这个局域网下的 上面还有一层net 并不是直接接入互联网

要绕过这个限制的话 得使用一个具有公网ip的设备作为服务器

想了一下可以用云服务器做ftp服务器(云服务器有公网ip) 但是这样一来 文件传输就比较麻烦了 我要共享的文件肯定是做好了时候 直接拖进共享文件夹就好了 搭建在云服务器上的话 还得从本地上传到云服务器 黑窗口可难管理文件 用finalshell或者宝塔的话倒也是可以实现直接拖动文件 好像也不是不行哈 而且如果只用它做个中转 甚至不需要对它进行操作 搭好服务就不用管了 那既然这样的话 我为什么不直接用云同步服务呢 开源的云盘有那么多 一键部署在云服务器上 界面也美观 安全性也不需要自己考虑 然后访问的话 直接输入服务器ip+该云盘端口号……额emmmm

到这里 实验已经不再有任何意义了 hh

因为方便访问的问题解决了 那么唯一能突破的地方就是 如果机房不能连公网 还能实现与本地的文件共享 这个ftp方式才有意义……对它期望太高了hhh 要实现这个东西 得把机房的局域网和本地的局域网连起来 显然是很难获得这个权限的 不过这也拓展了一个思路 怎么把两个局域网连接 这个后面再讨论

退一万步来讲 抛开意义不谈 再想想还有什么方式能让公网访问到本地的ftp服务器(不转移到云服务器)

偶然间才知道……原来所有的这种让内网的东西能让外网访问的方式 都叫做内网穿透……我还以为是什么特别的技术 原来是它只是一个概念(叫的那么高大上……)emm它 实现方式有多种 其实我也都基本试过了 只是不知道它们就是内网穿透

内网穿透是一种技术,它允许从公网访问处于NAT或防火墙后的本地网络中的服务。这可以是解决您问题的另一种方式。内网穿透通常通过以下几种技术实现:

反向代理: 这是一种常见的内网穿透方法,通常由运行在公网服务器上的软件(如Nginx、Apache)提供。反向代理服务器接收来自公网的请求并将其转发到内网的服务。

VPN隧道: VPN可以创建一条从公网到内网的加密通道。您可以在有公网IP的云服务器上设置VPN服务器,然后在本地机器上连接到这个VPN,从而使本地机器对公网可见。

端口映射服务: 一些第三方服务提供商(如Ngrok、FRP、ZeroTier)提供简单的内网穿透服务。这些服务允许您通过它们的公网服务器来转发请求到您的内网服务,无需复杂的配置。

P2P连接: 有些内网穿透工具(如Hamachi、Tailscale)使用P2P技术来直接连接不同网络中的设备,无需公网IP或端口映射。

用到这里大概就是

在本地搭建ftp服务器 云服务器上搭建vpn服务器 其实就差不多是个异地组网 让他们在一个局域网内 访问vpn服务器的请求会转发到本地的ftp服务器上 实现公网共享

这个思路用反向代理也是一样的 用云服务器反向代理这个台式机 使得访问云服务器就好像在访问台式机一样 显然也是可行的

至于端口映射 没尝试过 以后再说

设想局域网相连

已经浪费蛮多时间了 就不继续实验了 还得学算法……

在这里只做个设想 以后再来尝试实现

我:

如何将两台路由器组成一个局域网呢 比如我寝室有个路由器 朋友寝室也有一个路由器 下面自然就各有两个局域网 如果我希望让这两个局域网也嫩相互通信该怎么做 我能想到的办法是 再加一个交换机 把他们用网线相连 但显然不可靠 线路太麻烦了 然后就是 可能可以再用tailscale这样的异地组网的东西 将他们连接起来? 貌似就这些了吧 还有什么方式吗

chatgpt:

将两台路由器下的局域网连接起来,让它们能够相互通信,有几种不同的方法。以下是一些可行的解决方案:

物理连接: 如您所述,最直接的方式是使用以太网线(如果距离足够近)或光纤来物理连接两台路由器。但这在实际中往往由于距离过长或布线难度而不可行。

无线桥接: 如果两个路由器距离不远,且支持无线桥接(WDS - Wireless Distribution System)功能,可以设置无线桥接,将两个路由器无线连接起来,实现局域网的扩展。

VPN隧道: 使用VPN创建两个路由器之间的加密通道。这可以是通过公网,使用如OpenVPN或WireGuard的服务在两台路由器之间建立安全连接。

软件定义网络(SDN): 如您提到的Tailscale,或其他类似的软件(例如ZeroTier),可以在两个网络之间创建虚拟网络层,它们在逻辑上连接两个网络,无论它们在物理上的位置。

端到端隧道: 某些专业的网络设备支持端到端隧道的建立,这样可以跨越公网安全连接两个局域网。

云服务: 使用云服务(如Amazon VPC或Azure Virtual Network)来连接两个路由器,虽然这不是组建局域网的传统方式,但它允许两个局域网中的设备通过云服务进行通信。

每种方法都有其适用的情境,选择哪一种取决于您的具体需求、两个路由器的功能以及可用的技术资源。例如,如果是在一个校园或者企业环境,VPN或SDN可能是最合适的选择,因为它们不需要物理布线,而且可以提供更好的安全性。如果是在同一个建筑内或相邻建筑,无线桥接可能是一个简单实用的解决方案。在任何情况下,安全都是一个重要考虑因素,确保设置了强加密和身份验证,以保护网络不受未授权访问。


⬅️ 尝试应用 🏠 00-网络与项目 ➡️ Windows 原生全能服务器搭建笔记