Вопрос или проблема
Я пытаюсь отправить/получить файл с помощью TFTP с сетевого переключателя на ubuntu (VirtualBox на Windows 10 Pro), но получаю код ошибки 5
Следуя шагам, упомянутым ниже, кажется, что мой локальный хост работает с TFTP-сервером, я могу отправлять и получать файлы, используя локальный хост:
/home/abc# tftp localhost
tftp> put test
Отправлено 16 байт за 0.0 секунд
tftp> get test
Получено 16 байт за 0.0 секунд
root@abc:/home/abc# ls -l /var/lib/tftpboot/
всего 4
-rwxrwxrwx 1 root root 14 Сен 6 18:03 test
Когда я использовал команду на переключателе для отправки/получения файла, я получаю сообщение об ошибке:
Протокол простой передачи файлов
Opcode: Код ошибки (5)
[Целевой файл: test]
Код ошибки: Нарушение доступа (2)
Сообщение об ошибке: Нарушение доступа
[Информация эксперта (Предупреждение/Ответ): TFTP ERROR пакет]
[TFTP ERROR пакет]
[Уровень серьезности: Предупреждение]
[Группа: Ответ]
Не могли бы вы подсказать мне, как решить эту проблему?
https://icesquare.com/wordpress/how-to-setup-tftp-on-ubuntu/
Сначала давайте установим все необходимые пакеты:
sudo apt-get install xinetd tftpd tftp -y
Далее нам нужно создать файл конфигурации:
sudo nano /etc/xinetd.d/tftp
Вставьте следующее содержимое в файл.
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = var/lib/tftpboot -s
disable = no
}
В server_args у меня указано var/lib/tftpboot, которое представляет собой расположение корня tftp, т.е. /var/lib/tftpboot. Обратите внимание, что я пропускаю корень /.
Теперь давайте изменим владельца каталога:
sudo mkdir /var/lib/tftpboot
sudo chown -R nobody:nobody /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot
и запустим службу TFTP:
sudo service xinetd stop
sudo service xinetd start
Проверьте, работает ли TFTP правильно:
netstat -na | grep LIST | grep 69
Вы должны видеть что-то вроде этого:
tcp 0 0 0.0.0.0:69 0.0.0.0:* LISTEN
Тест: Загрузите файл на TFTP сервер
Теперь давайте протестируем TFTP сервер, сначала войдя на сервер:
tftp localhost
и загрузим файл:
tftp> put myfile.jpg
Отправлено 56733279 байт за 5.7 секунд
Выйти:
q
Убедитесь, что файл был загружен:
ls -l /var/lib/tftpboot
Тест: Скачайте файл с TFTP сервера
Теперь давайте перейдем в другой каталог и загрузим файл, который мы только что загрузили.
cd some_other_directory
и снова войдите на tftp сервер:
tftp localhost
и получите файл:
tftp> get myfile.jpg
Получено 56733279 байт за 5.7 секунд
Проблема заключалась в том, что IP-адрес сети переключателя и IP-адрес машины Ubuntu находились в разных сетях. Проблема была решена путем установки статического IP-адреса моей машины Ubuntu в ту же сеть, что и IP-адрес переключателя.
Ответ или решение
Ошибка TFTP: Код ошибки (5) и ее Решение
При выполнении передачи файлов с помощью TFTP (Trivial File Transfer Protocol) могут возникать различные ошибки, одной из которых является ошибка с кодом 5 – «Access violation» (нарушение доступа). В данном ответе мы рассмотрим, как устранить данную проблему при работе с TFTP на примере вашего случая, когда ошибки возникли при передаче файлов между сетевым коммутатором и виртуальной машиной с Ubuntu.
1. Понимание Ошибки TFTP Код 5
Ошибка с кодом 5 указывает на нарушение доступа, что означает, что TFTP сервер не может завершить запрашиваемую операцию по различным причинам. Это может быть вызвано:
- Необходимыми правами на каталоги или файлы.
- Неправильной настройкой TFTP сервера.
- Несоответствующими сетевыми настройками.
2. Проверка Настройки TFTP Сервер
Вы привели подробные шаги по настройке TFTP сервера, и они выглядят корректно. Обратите внимание на следующие ключевые моменты, которые могли вызвать отключение:
-
Права доступа. Убедитесь, что каталог
/var/lib/tftpboot
, а также все файлы внутри него имеют корректные права доступа и принадлежат пользователю, от имени которого работает TFTP сервер. Например:sudo chown -R nobody:nobody /var/lib/tftpboot sudo chmod -R 777 /var/lib/tftpboot
-
Параметры запуска. Проверьте настройки сервера в файле конфигурации
/etc/xinetd.d/tftp
. Убедитесь, что путь к корневому каталогу задан правильно и что указатель-s
используется корректно:server_args = /var/lib/tftpboot -s
3. Сетевые Настройки
Как вы упомянули, проблема была решена путем обеспечения того, чтобы IP-адрес виртуальной машины Ubuntu находился в одной подсети с IP-адресом сетевого коммутатора. Это крайне важно, так как:
- Коммуникация между устройствами. Протокол TFTP работает по UDP, и если устройства находятся в разных подсетях без корректно настроенных маршрутизаций, они не смогут обмениваться данными.
Рекомендации по настройке сети:
-
Установите статический IP на Ubuntu: Убедитесь, что статический IP-адрес вашей виртуальной машины совпадает с сетевой подсетью коммутатора.
-
Проверка сетевых соединений: Используйте команду
ping
, чтобы проверить доступность маршрутов:ping <IP-адрес-коммутатора>
-
Проверьте таблицы маршрутизации: Убедитесь, что маршрутизация настроена корректно на обоих устройствах.
4. Дополнительные Рекомендации
-
Логи TFTP. Всегда проверяйте логи TFTP сервера на наличие подсказок о возникшей ошибке. Логи можно найти в
/var/log/syslog
или/var/log/messages
в зависимости от конфигурации. -
Тестирование с помощью локального подключения. Сначала настройте и протестируйте TFTP-соединение с помощью локальной сети (например, TFTP на localhost), чтобы убедиться, что сервер функционирует.
Заключение
Ошибки TFTP могут быть связаны как с неправильными настройками сервера, так и с проблемами сетевой доступности. Убедившись, что вы находитесь в одной подсети и что права доступа на файлы соответствуют требованиям системы, можно легко устранить код ошибки 5 «Access violation». Если ошибка продолжает возникать, тщательно проверьте конфигурацию сети и права доступа.
Следуя приведенным рекомендациям, вы сможете успешно настроить и использовать TFTP, обеспечивая надежную передачу файлов в вашей сети.