Оригинальная ссылка 🔗 https://fuckcloudnative.io/posts/custom-derp-servers/
👉Предыдущая статьяПредставлено, как использовать Headscale
заменять Tailscale Официальный сервер управления и доступ к клиентам на различных платформах. В этой статье будет рассказано, как сделать Tailscale Использовать пользовательские DERP Серверы. Возможно, многие люди не знают DERP
да Какого черта?,Это не имеет значения,Я начну ссервер ретрансляцииНачни говорить。
Tailscale изконечная цельда Пусть двоегде угодно в сетииз Настройка машинысоединение «точка-точка»(прямое соединение),Но реальный мир сложен,В большинстве случаев машина находится NAT и за брандмауэром, в это время необходимо добиться прямого соединения путем сверления отверстий, т.е. NAT проникнуть.
NAT в соответствии с Поведение сопоставления NATиПоведение брандмауэра с отслеживанием состоянияМожетразделен многих типов, но для NAT С глубокой точки зрения вам не нужно заботиться о таком количестве типов, вам просто нужно посмотреть на NAT Или межсетевой экран с отслеживанием состояния будет строго проверять цели Endpoint,По этому фактору,Может Воля NAT разделен на Easy NAT и Hard NAT。
2.2.2.2:4242
,Другие клиенты не допускаются。Этот вид NAT Более строгий, так это называется Hard NAT。для Easy NAT, нам нужно только предоставить стороннюю службу, которая может сообщить клиенту «публичную сеть, которую он видит». ip:port что такое", а затем эта информация каким-то образом сообщается узлу связи (пиру), и последний знает, по какому адресу устанавливать соединение! вид услуга называется STUN (Session Traversal Utilities for NAT, приложение для обхода сеанса NAT). Его рабочий процесс показан ниже:
ip:port
”。для Hard NAT Например, СТАН Это не сработает, даже если STUN Получил публичную сеть клиента ip:port
Сообщение узлу связи не поможет, потому что брандмауэр не работает. STUN Разрыв открывается только общением. Этот разрыв позволяет только. STUN Входящие пакеты поступают, а другие коммуникационные узлы не могут войти, даже если знают об этом разрыве. Обычно уровень предприятия NAT Все принадлежат Hard NAT。
В этом случае сверлить дыры нельзя, но и сдаваться нельзя. Можно выбрать компромиссный метод: создать сервер ретрансляции (сервер ретрансляции), клиент связывается с сервером ретрансляции, а сервер ретрансляции затем отправляет пакет Relay. к партнеру связи.
Что касается работоспособности реле, то она зависит от конкретной ситуации:
фактическидля Для большинства сетей,Tailscale Успешно можно просверлить отверстия с помощью различных черных технологий. Лишь в редких случаях вы выберете реле – это всего лишь разновидность. fallback механизм.
Существует множество способов реализации протоколов ретрансляции.
TURN означает «Обход с использованием реле вокруг NAT». Это классический метод реализации реле. Основная концепция:
В отличие от STUN, этот протокол не обладает реальной интерактивностью и не очень прост в использовании, поэтому Tailscale не использует TURN в качестве протокола ретрансляции.
DERP расшифровывается как Detoured Encrypted Routing Protocol, протокол, разработанный Tailscale:
Tailscale автоматически выберет сервер DERP, ближайший к целевому узлу, для ретрансляции трафика.
Tailscale интересен при использовании алгоритма из,Все соединения между клиентами выбираются в первую очередь DERP режим (режим реле), что означает, что соединение устанавливается немедленно (самый низкий приоритет, но 100% Можно добиться успеха из режима),пользователь Не нужно ждать。Затем параллельно начните обнаружение пути.,Обычно через несколько секунд,Мы можем найти лучший путь,Тогда Воля существующее соединение прозрачно модернизируется (обновляется) в прошлом,становитьсясоединение «точка-точка»(прямое соединение)。
Таким образом, DERP — это не только гарантированный метод связи Tailscale в случае сбоя проникновения NAT (в настоящее время его роль аналогична TURN), но и обходной канал, который помогает нам завершить проникновение NAT в других сценариях. Другими словами, это и наш метод гарантии, и инфраструктура, которые помогают нам перейти на одноранговое соединение, когда есть более проникающая связь.
Tailscale Закрытый ключ будет сохранен только на текущем узле, поэтому DERP server Он не может расшифровать трафик, он может только шифровать трафик и пересылать его с одного узла на другой, как и другие маршрутизаторы в Интернете. DERP Для предотвращения злоупотреблений используется немного более продвинутый протокол.
Tailscale Открытый исходный код DERP Код сервера, если интересно, можете прочитать Исходный код DERP[1]。
Tailscale Есть много официальных встроенных DERP сервер,Шаг за шагом существуют по всему миру,За исключением того, что сюда не входит материковый Китай.,Вы знаете причину。Это приводит к тому, что как только трафик проходит DERP Когда сервер выполняет ретрансляцию, задержка будет очень высокой. И это официально предусмотрено DERP Сервером пользуются тысячи людей, что создает угрозу безопасности.
Чтобы добиться низкой задержки и высокой безопасности, мы можем обратиться к Официальная документация Tailscale[2]Самодельный и частныйиз DERP сервер. Существует два режима развертывания: один основан на имени домена, а другой не требует имени домена и может использоваться напрямую. IP, но для этого требуется немного черной технологии. Давайте сначала рассмотрим самый простой. доменное схема имяиз.
Это решение должно соответствовать следующим условиям:
Если все вышеперечисленные условия соблюдены, вы можете начать развертывание, выполнив следующие действия.
Рекомендуется использовать Docker напрямую для развертывания. Я уже создал образ Docker и могу развернуть его напрямую:
🐳 → docker run --restart always \
--name derper -p 12345:12345 -p 3478:3478/udp \
-v /root/.acme.sh/xxxx/:/app/certs \
-e DERP_CERT_MODE=manual \
-e DERP_ADDR=12345 \
-e DERP_DOMAIN=xxxx \
-d ghcr.io/yangchuansheng/derper:latest
Следует отметить несколько моментов:
3478
;о Сертификат Некоторые части необходимо выделить:Предположим, ваше доменное имя xxx.com
,Так Сертификатизтребуется имяда xxx.com.crt
,Ни один персонаж не ошибается! Та же причина,закрытый ключтребуется имяда xxx.com.key
,Ни один персонаж не ошибается!
Просмотр журналов контейнера:
🐳 → docker logs -f derper
2022/03/26 11:36:28 no config path specified; using /var/lib/derper/derper.key
2022/03/26 11:36:28 derper: serving on :12345 with TLS
2022/03/26 11:36:28 running STUN server on [::]:3478
В настоящее время derper аварийно завершает работу после некоторого времени работы. В настоящее время нет лучшего решения. Эту проблему можно решить только регулярным перезапуском. Например, с помощью crontab установите перезапуск контейнера каждые два часа:
0 */2 * * * docker restart derper &> /dev/null
Для получения подробной информации, пожалуйста, обратитесь к этому issue:Derper TLS handshake error: remote error: tls: internal error[3]
JSON
,и Tailscale Официальный сервер управления использует тот же формат и синтаксис.YAML
。Мы можем напрямую использовать локальный файл конфигурации YAML, его содержимое следующее:
# /etc/headscale/derp.yaml
regions:
900:
regionid: 900
regioncode: thk
regionname: Tencent Hongkong
nodes:
- name: 900a
regionid: 900
hostname: xxxx
ipv4: xxxx
stunport: 3478
stunonly: false
derpport: 12345
- name: 900b
regionid: 900
hostname: xxxx
ipv4: xxxx
stunport: 3478
stunonly: false
derpport: 12345
901:
regionid: 901
regioncode: hs
regionname: Huawei Shanghai
nodes:
- name: 901a
regionid: 901
hostname: xxxx
ipv4: xxxx
stunport: 3478
stunonly: false
derpport: 12345
Инструкции по настройке:
regions
да YAML серединаизобъект,подиз КаждыйодинобъектвыражатьодинЗона доступности,каждыйЗона доступностиВнутри может быть несколько настроек DERP узел, то есть nodes
。regionid
Невозможно повторить.node
из name
Невозможно повторить.regionname
Обычно используется для описания Зоны. доступности,regioncode
Обычно устанавливается на Зону доступностиизаббревиатура。ipv4
Поле не является обязательным, если ваше доменное имя может быть передано вам через общедоступную сеть. DERP Адрес сервера, здесь его заполнять не нужно. Если вы используете доменное имя второго уровня и у вас нет общедоступного доменного имени DNS server Добавьте соответствующие записи синтаксического анализа в , затем вам нужно указать их здесь IP(помещениедатыиз Сертификат Сумка Содержит это доменное имя второго уровня.,Это очень поддерживает,Просто создайте общее доменное имя (Сертификат).stunonly: false
средства Кроме использования STUN Также доступны услуги DERP Служить.Затем вам необходимо изменить файл конфигурации Headscale, чтобы он ссылался на пользовательский файл конфигурации DERP, указанный выше. Элементы конфигурации, которые необходимо изменить, следующие:
# /etc/headscale/config.yaml
derp:
# List of externally available DERP maps encoded in JSON
urls:
# - https://controlplane.tailscale.com/derpmap/default
# Locally available DERP map files encoded in YAML
#
# This option is mostly interesting for people hosting
# their own DERP servers:
# https://tailscale.com/kb/1118/custom-derp-servers/
#
# paths:
# - /etc/headscale/derp-example.yaml
paths:
- /etc/headscale/derp.yaml
# If enabled, a worker will be set up to periodically
# refresh the given sources and update the derpmap
# will be set up.
auto_update_enabled: true
# How often should we check for DERP updates?
update_frequency: 24h
Вы можете отключить официальный сервер DERP Tailscale, чтобы проверить, может ли ваш собственный сервер DERP работать правильно.
После изменения конфигурации перезапустите службу headscale:
$ systemctl restart headscale
Используйте следующую команду в клиенте Tailscale, чтобы просмотреть доступные на данный момент серверы DERP:
$ tailscale netcheck
Report:
* UDP: true
* IPv4: yes, xxxxx:57068
* IPv6: no
* MappingVariesByDestIP: false
* HairPinning: false
* PortMapping:
* Nearest DERP: Tencent Hongkong
* DERP latency:
- thk: 39.7ms (Tencent Hongkong)
tailscale netcheck
На самом деле только обнаруживает 3478/udp
порт, Даже если netcheck Это показывает, что оно может быть связано, но это не обязательно означает, что 12345 Порт может пересылать трафик. Самый простой способ — открыть его напрямую. DERP Сервера URL: https://xxxx:12345, если вы видите следующую страницу и адресную строку SSL Если на этикетке сертификата указано, что он доступен нормально, то проблем действительно нет.
Проверьте метод соединения с партнером связи:
$ tailscale status
10.1.0.5 coredns default linux -
carsondemacbook-pro default macOS active; direct xxxx:2756; offline, tx 50424 rx 34056
oneplus-8t default android active; relay "thk"; offline, tx 1608 rx 1552
openwrt default linux active; direct xxxx:2834; offline, tx 1403688 rx 1217620
Этот клиент представляет собой облачный хост с 3 одноранговые узлы связи соответственно macOS、OpenWRT и Android Мобильная версия, macOS и OpenWRT Все в домашней сети связи, Android Мобильные телефоны используют телекоммуникационный трафик. Видно, что только Android Телефон настраивается через DERP Сервер ретранслирует трафик, и вероятность успеха пробивания отверстий довольно высока. использовать ping Чтобы проверить подключение:
$ ping 10.1.0.8
PING 10.1.0.8 (10.1.0.8) 56(84) bytes of data.
64 bytes from 10.1.0.8: icmp_seq=1 ttl=64 time=150 ms
64 bytes from 10.1.0.8: icmp_seq=2 ttl=64 time=131 ms
64 bytes from 10.1.0.8: icmp_seq=3 ttl=64 time=161 ms
64 bytes from 10.1.0.8: icmp_seq=4 ttl=64 time=137 ms
64 bytes from 10.1.0.8: icmp_seq=5 ttl=64 time=156 ms
64 bytes from 10.1.0.8: icmp_seq=6 ttl=64 time=169 ms
^C
--- 10.1.0.8 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5005ms
rtt min/avg/max/mdev = 131.728/151.154/169.627/13.193 ms
Вы также можете использовать инструмент командной строки Tailscale для тестирования:
$ tailscale ping 10.1.0.8
pong from oneplus-8t (10.1.0.8) via DERP(thk) in 104ms
pong from oneplus-8t (10.1.0.8) via DERP(thk) in 111ms
pong from oneplus-8t (10.1.0.8) via DERP(thk) in 105ms
Этот более дружелюбный и сразу скажет вам, пройден ли он. DERP сервер ретрансляции Приходитьи Другая сторона Коммуникабельный.
Если в настоящее время Tailscale Хост, на котором находится клиент, включен IPv6, тогда мобильный телефон может напрямую передавать IPv6 Соединение «точка-точка»:
$ /Applications/Tailscale.app/Contents/MacOS/Tailscale status
coredns default linux active; direct xxxx:45986; offline, tx 124352 rx 185736
oneplus-8t default android active; direct [240e:472:da0:24a2:a07f:2a67:2a1e:4475]:37237; offline, tx 125216 rx 20052
openwrt default linux active; direct [240e:390:caf:1870:c02c:e8ff:feb9:b0b]:41641; offline, tx 181992 rx 3910120
$ /Applications/Tailscale.app/Contents/MacOS/Tailscale ping 10.1.0.8
pong from oneplus-8t (10.1.0.8) via [240e:472:da0:24a2:a07f:2a67:2a1e:4475]:37237 in 62ms
Итак, если вы включите IPv6,Можетзначительно увеличилсясоединение «точка-точка»изуровень успеха。
Я знаю,У большинства людей нет собственных доменных имен. Сделайте шаг назад,Даже если есть собственное доменное имя,Если нет записи,Также нет возможности развернуть существование для использования на внутренних серверах.
В настоящее время мы можем начать только с derper Исходный код был изменен и найден tailscale на складе cmd/derper/cert.go
Файл, проверка доменного имени Воли, связанный с контентом, удаленным или прокомментированным:
func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {
//if hi.ServerName != m.hostname {
// return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
//}
return m.cert, nil
}
Вам также необходимо создать самозаверяющий сертификат, который можно создать с помощью скрипта:
# build_cert.sh
#!/bin/bash
CERT_HOST=$1
CERT_DIR=$2
CONF_FILE=$3
echo "[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
countryName = XX
stateOrProvinceName = N/A
localityName = N/A
organizationName = Self-signed certificate
commonName = $CERT_HOST: Self-signed certificate
[req_ext]
subjectAltName = @alt_names
[v3_req]
subjectAltName = @alt_names
[alt_names]
IP.1 = $CERT_HOST
" > "$CONF_FILE"
mkdir -p "$CERT_DIR"
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout "$CERT_DIR/$CERT_HOST.key" -out "$CERT_DIR/$CERT_HOST.crt" -config "$CONF_FILE"
переписать Dockerfile, будет derper Доменное имя установлено на 127.0.0.1
:
FROM golang:latest AS builder
WORKDIR /app
# ========= CONFIG =========
# - download links
ENV MODIFIED_DERPER_GIT=https://github.com/yangchuansheng/ip_derper.git
ENV BRANCH=ip_derper
# ==========================
# build modified derper
RUN git clone -b $BRANCH $MODIFIED_DERPER_GIT tailscale --depth 1 && \
cd /app/tailscale/cmd/derper && \
/usr/local/go/bin/go build -ldflags "-s -w" -o /app/derper && \
cd /app && \
rm -rf /app/tailscale
FROM ubuntu:20.04
WORKDIR /app
# ========= CONFIG =========
# - derper args
ENV DERP_HOST=127.0.0.1
ENV DERP_CERTS=/app/certs/
ENV DERP_STUN true
ENV DERP_VERIFY_CLIENTS false
# ==========================
# apt
RUN apt-get update && \
apt-get install -y openssl curl
COPY build_cert.sh /app/
COPY --from=builder /app/derper /app/derper
# build self-signed certs && start derper
CMD bash /app/build_cert.sh $DERP_HOST $DERP_CERTS /app/san.conf && \
/app/derper --hostname=$DERP_HOST \
--certmode=manual \
--certdir=$DERP_CERTS \
--stun=$DERP_STUN \
--verify-clients=$DERP_VERIFY_CLIENTS
После сборки образа вы можете запустить контейнер derper непосредственно через образ на хосте, на котором вы хотите развернуть derper. Команда выглядит следующим образом:
🐳 → docker run --restart always --net host --name derper -d ghcr.io/yangchuansheng/ip_derper
и Использовать доменное Как и в случае с именемиз, брандмауэру необходимо освободить соответствующий порт (12345). и 3478)。
Просмотр журналов контейнера:
🐳 → docker logs -f derper
Generating a RSA private key
.......................................+++++
..............+++++
writing new private key to '/app/certs//127.0.0.1.key'
-----
2022/03/26 14:30:31 no config path specified; using /var/lib/derper/derper.key
2022/03/26 14:30:31 derper: serving on :443 with TLS
2022/03/26 14:30:31 running STUN server on [::]:3478
Если вы хотите построить свой собственный derper зеркало,Можетссылкамой GitHub Склад[4]。
Ниже приводится крутая операция, мы здесь Headscale из КонфигурациясерединануждатьсяВоля DERP Доменное имя установлено на IP!не понимаюиз Может Переварите это еще раз,Тогда продолжайте читать ниже, хаха~~
Кроме derper Снаружи, хвостовая чешуя клиент还нуждатьсяПропустить проверку доменного имени,Это необходимо для существования DERP задается в конфигурации. и Headscale местных YAML Файл на данный момент не поддерживает этот элемент конфигурации, поэтому другого способа нет. Мы можем использовать только онлайн. URL . JSON Содержание конфигурации следующее:
{
"Regions": {
"901": {
"RegionID": 901,
"RegionCode": "ali-sh",
"RegionName": "Aliyun Shanghai",
"Nodes": [
{
"Name": "901a",
"RegionID": 901,
"DERPPort": 443,
"HostName": "xxxx",
"IPv4": "xxxx",
"InsecureForTests": true
}
]
}
}
}
Анализ конфигурации:
HostName
Заполните напрямую derper из общедоступной сети IP,Прямо сейчаси IPv4
из ценностей те же.InsecureForTests
Должно быть установлено true,к Пропустить проверку доменного имени。Вам необходимо превратить этот файл JSON в URL-адрес, к которому может получить доступ сервер Headscale, например, настроить Nginx на хосте Headscale или загрузить его в объектное хранилище (например, Alibaba Cloud OSS).
Затем вам необходимо изменить файл конфигурации Headscale, чтобы он ссылался на указанный выше пользовательский URL-адрес DERP. Элементы конфигурации, которые необходимо изменить, следующие:
# /etc/headscale/config.yaml
derp:
# List of externally available DERP maps encoded in JSON
urls:
# - https://controlplane.tailscale.com/derpmap/default
- https://xxxxx/derp.json
# Locally available DERP map files encoded in YAML
#
# This option is mostly interesting for people hosting
# their own DERP servers:
# https://tailscale.com/kb/1118/custom-derp-servers/
#
# paths:
# - /etc/headscale/derp-example.yaml
paths:
- /etc/headscale/derp.yaml
# If enabled, a worker will be set up to periodically
# refresh the given sources and update the derpmap
# will be set up.
auto_update_enabled: true
# How often should we check for DERP updates?
update_frequency: 24h
После изменения конфигурации перезапустите службу headscale:
$ systemctl restart headscale
Используйте следующую команду в клиенте Tailscale, чтобы просмотреть доступные на данный момент серверы DERP:
$ tailscale netcheck
Report:
* UDP: true
* IPv4: yes, 192.168.100.1:49656
* IPv6: no
* MappingVariesByDestIP: true
* HairPinning: false
* PortMapping: UPnP
* Nearest DERP: Home Hangzhou
* DERP latency:
- home: 9.7ms (Home Hangzhou)
- hs: 25.2ms (Huawei Shanghai)
- thk: 43.5ms (Tencent Hongkong)
снова Проверьте метод соединения с партнером связи:
$ tailscale status
coredns default linux active; direct xxxx:45986; offline, tx 131012 rx 196020
oneplus-8t default android active; relay "home"; offline, tx 211900 rx 22780
openwrt default linux active; direct 192.168.100.254:41641; offline, tx 189868 rx 4074772
можно увидеть на этот раз Tailscale автоматически выбраноодин Линия оптимальнаяизОдомашненный DERP Сервер действует как ретранслятор, и вы можете проверить задержку:
$ tailscale ping 10.1.0.8
pong from oneplus-8t (10.1.0.8) via DERP(home) in 30ms
pong from oneplus-8t (10.1.0.8) via DERP(home) in 45ms
pong from oneplus-8t (10.1.0.8) via DERP(home) in 30ms
Идеальный! Вот home Конечно, метод развертывания домашнего широкополосного доступа аналогичен вышеупомянутому внутреннему облачному хосту. Вам необходимо дополнительно включить общедоступную сеть и сопоставление портов (12345/tcp,). 3478/удап). Еще одна вещь, на которую следует обратить внимание, — это содержимое конфигурации:
{
"Regions": {
"901": {
"RegionID": 901,
"RegionCode": "ali-sh",
"RegionName": "Aliyun Shanghai",
"Nodes": [
{
"Name": "901a",
"RegionID": 901,
"DERPPort": 443,
"HostName": "xxxx",
"IPv4": "xxxx",
"InsecureForTests": true
}
]
},
"902": {
"RegionID": 902,
"RegionCode": "home",
"RegionName": "Home Hangzhou",
"Nodes": [
{
"Name": "902a",
"RegionID": 902,
"DERPPort": 12345,
"HostName": "xxxx",
"InsecureForTests": true
}
]
}
}
}
По сравнению с домашними облачными хостами существует два различия в конфигурации домашнего широкополосного доступа:
IPv4
Элементы конфигурации. Потому что домашний широкополосный доступ из общедоступной сети IP да меняется динамически, поэтому вам нужно использовать DDNS Для динамического анализа общедоступной сети IP。HostName
Лучше всего указать доменное имя,потому чтотыиз общедоступной сети IP да изменяется динамически и не может быть заполнено IP,пока неты不停地修改Конфигурация文件。Заполните доменное имя Это не имеет значения Ла,В любом случае доменное имя не будет проверено.,Нет необходимости беспокоиться о сертификате,При условии, что доменное имя может быть преобразовано в ваш общедоступный IP-адрес.По умолчанию DERP Серверами можно пользоваться бесплатно, если другие знают ваши DERP Адрес и порт Сервера могут использоваться им. Если на вашем сервере небольшой водопровод, и если вы используете его слишком много людей, он может вас перегрузить, поэтому нам необходимо изменить конфигурацию, чтобы улучшить производительность. проституцией бесплатно。
Специальное заявление: Используйте только доменное Только таким способом можно пройти сертификацию предотвращения Бытия. проституцией бесплатно,Используйте чистый IP Невозможно предотвратить белую проституцию, можно только тщательно скрывать свою IP и порт, не могу сообщить другим.
Нужно сделать всего две вещи:
1、существовать DERP Установить на сервер Tailscale。
Первый шаг требует существования DERP Установка услуги на хост-компьютер Tailscale клиент,Запустите масштабный процесс。
2、derper Добавляем параметры при запуске --verify-clients
。
В этой статье рекомендуется запускать контейнер.,Содержимое Dockerfile [5]следующее:
FROM golang:latest AS builder
LABEL org.opencontainers.image.source https://github.com/yangchuansheng/docker-image
WORKDIR /app
# https://tailscale.com/kb/1118/custom-derp-servers/
RUN go install tailscale.com/cmd/derper@main
FROM ubuntu
WORKDIR /app
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends apt-utils && \
apt-get install -y ca-certificates && \
mkdir /app/certs
ENV DERP_DOMAIN your-hostname.com
ENV DERP_CERT_MODE letsencrypt
ENV DERP_CERT_DIR /app/certs
ENV DERP_ADDR :443
ENV DERP_STUN true
ENV DERP_HTTP_PORT 80
ENV DERP_VERIFY_CLIENTS false
COPY --from=builder /go/bin/derper .
CMD /app/derper --hostname=$DERP_DOMAIN \
--certmode=$DERP_CERT_MODE \
--certdir=$DERP_CERT_DIR \
--a=$DERP_ADDR \
--stun=$DERP_STUN \
--http-port=$DERP_HTTP_PORT \
--verify-clients=$DERP_VERIFY_CLIENTS
По умолчанию --verify-clients
Параметры установлены на false
。нам не нужно Dockerfile Чтобы внести какие-либо изменения в содержимое, просто добавьте переменную среды Прямо при запуске контейнера. Сейчас можно изменить перед командой «Воля иззапуская»:
🐳 → docker run --restart always \
--name derper -p 12345:12345 -p 3478:3478/udp \
-v /root/.acme.sh/xxxx/:/app/certs \
-e DERP_CERT_MODE=manual \
-e DERP_ADDR=12345 \
-e DERP_DOMAIN=xxxx \
-e DERP_VERIFY_CLIENTS=true \
-d ghcr.io/yangchuansheng/derper:latest
Это сделано. Даже если другие знают адрес вашего сервера DERP, они не смогут его использовать. Однако даже в этом случае вам следует стараться не сообщать другим адрес вашего сервера, чтобы другие не смогли его захватить. преимущество в этом.
Эта статья познакомит вас STUN для вспомогательного NAT Значение проникновения было популяризировано несколькими распространенными протоколами ретрансляции, в том числе Tailscale Саморазвитый DERP протокол. Наконец, я шаг за шагом научу вас, как создать свой собственный личный кабинет. DERP сервер и пусть Tailscale Используйте наши собственные DERP сервер.
[1]
DERP Исходный код: https://github.com/tailscale/tailscale/tree/main/derp
[2]
Tailscale Официальная документация: https://tailscale.com/kb/1118/custom-derp-servers/
[3]
Derper TLS handshake error: remote error: tls: internal error: https://github.com/tailscale/tailscale/issues/4082
[4]
мой GitHub склад: https://github.com/yangchuansheng/ip_derper
[5]
Dockerfile содержание: https://github.com/yangchuansheng/docker-image/blob/master/derper/Dockerfile
[6]
NAT Как работает проникновение: технические принципы и практика на уровне предприятия: https://arthurchiao.art/blog/how-nat-traversal-works-zh/
[7]
Custom DERP Servers: https://tailscale.com/kb/1118/custom-derp-servers/
[8]
Encrypted TCP relays (DERP): https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp