Ускорение передачи больших данных путем развертывания ретранслятора croc во внутренней сети
Если вы IT-специалист, который вынужден тратить время на бесконечные процедуры согласования каждый раз при передаче больших объемов данных из-за того, что политики безопасности запрещают использование внешних облачных хранилищ, эта статья — ваше решение. В croc используется протокол PAKE, поэтому даже сервер-ретранслятор не может получить доступ к вашим данным. Ниже описан способ обеспечения высокой скорости передачи без нарушения политик безопасности.
1. Устранение ожиданий одобрения брандмауэра с помощью выделенного ретранслятора
Размещение ретранслятора непосредственно в DMZ-зоне, минуя внешние серверы, позволяет избежать процедур согласования с командой безопасности. croc использует порт TCP 9009 для передачи сигналов управления и порты с 9010 по 9013 для передачи данных. Фиксация этого диапазона позволяет корректно настроить правила брандмауэра.
Используйте Docker для запуска контейнера, чтобы изолировать среду.
`bash
docker network create --driver bridge croc-dmz-net
docker run -d --name croc-relay
-p 9009:9009 -p 9010-9013:9010-9013
-e CROC_PASS='비밀번호'
docker.io/schollz/croc:latest
`
Чтобы не вводить адрес сервера и пароль каждый раз на корпоративных машинах, добавьте следующие настройки в файл профиля (~/.bashrc):
`bash
export CROC_RELAY="내부서버IP:9009"
export CROC_PASS='비밀번호'
`
Благодаря этому исчезает необходимость в ожидании подтверждения передачи данных, так как внешние серверы не задействуются.
2. Автоматический запуск ретранслятора через systemd
Вручную запускать ретранслятор после каждой перезагрузки сервера неэффективно. Создайте unit-файл systemd для постоянной работы процесса. Использование учетной записи nobody вместо root позволит минимизировать ущерб в случае инцидентов безопасности.
Создайте файл /etc/systemd/system/croc-relay.service:
`ini
[Unit]
Description=croc relay service
[Service]
User=nobody
ExecStart=/usr/local/bin/croc relay --ports "9009,9010,9011,9012,9013"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
`
После создания файла выполните systemctl daemon-reload и запустите службу командой systemctl enable --now croc-relay.service. Даже если сервер упадет, он автоматически восстановится в течение 5 секунд.
3. Обеспечение целостности больших файлов и советы по передаче
При перемещении папок проекта размером в сотни гигабайт важно предотвратить потерю файлов. Используйте архивацию через tar с проверкой контрольных сумм.
Пример скрипта передачи:
`bash
Отправитель
tar -czf data.tar.gz ./project_folder
sha256sum data.tar.gz > checksum.txt
croc send data.tar.gz checksum.txt
Получатель
croc recv [код]
sha256sum -c checksum.txt && tar -xzf data.tar.gz
`
Это позволяет избежать уязвимостей при распаковке (таких как CVE-2023-43616) и сразу же проверить, не были ли повреждены данные при передаче.
4. Настройка сети для поддержания скорости
При передаче данных терабайтного уровня стандартные настройки могут приводить к появлению узких мест. Чтобы сессия не разрывалась, добавьте параметры сокета в /etc/sysctl.conf:
`bash
net.ipv4.tcp_keepalive_time=60
net.core.rmem_max=134217728
`
Сокращение интервала TCP Keepalive до 60 секунд поможет решить проблему принудительного разрыва сессий межсетевыми экранами, отслеживающими состояние соединений. Если сервер используют несколько команд одновременно, выделяйте каждой команде свой диапазон портов (например, 9010-9014, 9020-9024) и запускайте отдельные контейнеры. При фиксированных настройках брандмауэра команды смогут стабильно передавать данные, не мешая друг другу.