Протокол TFTP (Trivial File Transfer Protocol) упрощенный протокол передачи файлов, обеспечивающей простую возможность скачивания и загрузки. Обычно протокол TFTP используется для загрузки по PXE (сетевая загрузка, бездисковые рабочие станции, установка ОС по сети, и пр.), загрузки/обновления конфигурации/прошивок сетевого оборудования и ряда других специфичных задач. В проколе отсутствуют средства защиты, аутентификации и управления. Основное его преимущество – простота реализации клиентской части и высокая производительность при передаче файлов большого объема. Протокол работает по порту 69 UDP.
Запуск TFTP сервера в Windows
Чаще всего для быстрого запуска TFTP сервера в Windows используют бесплатный opensource Tftpd64 (tftpd32). Вы можете скачать portable или установочный пакет tftpd64 здесь.
- Запустите исполняемый файл tftpd64.exe;
- Интерфейс tftpd64 состоит из нескольких вкладок. На вкладке Tftp Server нажмите кнопку Settings и выберите каталог, который вы хотите опубликовать;
- Выберите TFTP Security = None
- После того, как вы изменили настройки TFTP, нужно перезапустить программу.
- Откройте в Windows Firewall порт 69/UDP для входящего TFTP трафика. Можно создать разрешающее правило в файерволе Windows с помощью PowerShell: N
ew-NetFirewallRule -DisplayName 'TFTP-UDP-In' -Direction Inbound -Action Allow -Protocol UDP -LocalPort 69
- Теперь вы можете подключиться к tftp, чтобы получить или загрузить файл.
Программу tftpd64 можно использовать в качестве TFTP клиента. Перейдите на вкладку Tftp Client, укажите IP адрес TFTP сервера и порт подключения (69 по умолчанию).
Теперь вы можете скачать (Get) или загрузить (Put) файлы на указанный tftp сервер.
На вкладке Log viewer можно посмотреть логи подключений к TFTP.
Установка клиента TFTP в Windows
По умолчанию в Windows не установлен клиент TFTP. Вы можете установить в Windows 10/11 его командой:
Enable-WindowsOptionalFeature –FeatureName TFTP -Online
В Windows Server для установки клиента TFTP используется другая команда:
Install-WindowsFeature TFTP-Client
Теперь вы можете использовать утилиту tftp.exe для скачки и загрузки файлов по TFTP.
- Передать файл на TFTP сервер:
tftp 192.168.1.100 PUT имя_файла.txt
- Скачать файл с TFTP:
tftp 168.1.100 GET имя_файла.txt
Установка встроенного TFTP сервера в Windows Server
В Windows Server доступен встроенный TFTP сервер, который входит в состав роли WDS и используется для PXE загрузки и установки Windows по сети. Чтобы установить службу TFTP, откройте консоль Server Manager -> Add Roles and Features Wizard -> выберите роль Windows Deployment Services (Службы развертывания Windows).
В компонентах роли WDS выберите только Transport Server (Транспортный сервер).
После завершения установки создайте каталог, который будет корневым каталогом для TFTP сервера. Например, C:\tftp.
Укажите путь к корневому каталогу TFTP в строковом REG_SZ параметре RootFolder в разделе реестра HKLM\SYSTEM\CurrentControlSet\services\WDSServer\Providers\WDSTFTP
В параметре ReadFilter указан список каталогов, из которых разрешена загрузка файлов. По умолчанию загрузка возможна только из каталогов
\boot\
и
\tmp\
. Если вы используете другую структуру каталогов, нужно добавить разрешенные каталоги в параметр ReadFilter или указать тут
\*
.
Запустите службу WDSServer:
Get-Service WDSServer| Start-Service
Включить автоматический запуск службы с помощью Set-Service:
set-service WDSServer -StartupType Automatic
Проверьте, что служба запущена и ее процесс ожидает подключения на порту UDP 69:
Get-Process -Id (Get-NetUDPEndpoint -LocalPort 69).OwningProcess
В Windows Firewall доступ к UDP порту 69 отрывает правило “Windows Deployment Services (UDP-In)”. Проверьте, что правило брандмауэра включено:
(Get-NetFirewallRule -displayname 'Windows Deployment Services (UDP-In)').enabled
Попробуйте скачать файл с TFTP сервера с помощью встроенного клиента tftp.exe:
tftp -i 192.168.158.10 get test.zip
Основной недостаток встроенного TFTP сервера в Windows Server – он не позволяет открыть папку для записи. Это означает, что клиенты могут только скачивать файлы с такого TFTP сервера, но не загружать.