❝Исходная ссылка🔗:https://icloudnative.io/posts/wireguard-over-tcp-using-phantun/ Или нажмите на левый нижний угол Прочитайте оригинальную статью Посмотреть исходный текст напрямую👇
👉WireGuard Как более продвинутый и современный VPN протокол по сравнению с традиционным IPSec、OpenVPN Ожидается реализация, она будет более эффективной и простой в настройке и объединена в Linux Ядро удобнее использовать, просто VPN истребителей. Все больше и больше экспертов используют WireGuard Удовлетворите множество странных потребностей. Например, отечественные и зарубежные машины проходят WireGuard Откройте туннель и станьте фальшивкой IPLC Выделенная линия или подключить местную и Kubernetes Кластерная сеть.
но WireGuard В домашней сетевой среде вы столкнетесь с фатальнойизвопрос:Блокировка UDP/ограничение скорости。Хотяпроходить WireGuard Любые данные на основе IP протоколы (TCP, UDP, ICMP, SCTP, IPIP, GRE и т. д.), но WireGuard Сам туннель сквозной UDP протоколы связи, но у отечественных операторов просто нет возможности и сил общаться по TCP и UDP для глубокой настройки различных QoS Стратегия,Один размер подходит всемизозначает:верно UDP руководит ограничением скорости или даже блокадой。
Господин Лу Синь однажды сказал: «Шерсть получается от овец!» Прорыв по-прежнему остается за операторами: хотя для UDP недружелюбный,НоНевозможно определить глубину TCP соединятьизподлинность。
Это легко, ведь ты прав TCP Если я продолжу закрывать глаза, то я UDP связь, замаскированная под TCP Если вы не подключитесь, вам это сойдет с рук. В настоящее время поддерживает UDP трафик, замаскированный под TCP Основным инструментом для трафика является udp2raw[1],Я думаю, что многие друзья знакомы с этим инструментом.,но Извините,Сегодня главного героя нету,ида Другой мощнее этогоизновые инструменты:Phantun[2]。
Phantun весь проектПолностью реализовано на Rust,производительность udp2raw. Это исходное намерение и udp2raw Аналогично, все для достижения простого пользовательского состояния. TCP Государственная машина приходит в норму UDP Трафик замаскирован. Основная цель – сделать UDP Трафик выглядит так TCP и не хочу, чтобы на них влияло TCP retransmission или congestion control влияние.
Необходимо задекларировать изда,Phantun Цель не в том, чтобы заменить udp2raw,с самого начала Phantun Я надеюсь, что конструкция достаточно проста и эффективна, поэтому udp2raw поддерживается ICMP-туннелирование, шифрование, предотвращение повтораЖдите функций Phantun Все они предпочли не реализовывать его.
Phantomn предполагает, что протокол UDP сам по себе решил эти проблемы, поэтому весь процесс пересылки представляет собой простое изменение заголовка открытого текста плюс некоторую необходимую информацию для контроля состояния TCP. Что касается WireGuard, который я использую каждый день, конструкция Phantun достаточно безопасна, поскольку протокол WireGuard лучше реализует эти функции безопасности.
Phantun использует интерфейс TUN для отправки и получения пакетов уровня 3, а udp2raw использует фильтр Raw Socket + BFP. Лично я считаю, что реализация на основе TUN немного элегантнее, а кросс-платформенное портирование проще.
TCP-соединение Phantomun создается по требованию. При запуске Клиент не будет активно подключаться к серверу. Оно будет создано по запросу только после прибытия первого пакета данных. Каждый поток UDP имеет собственное независимое TCP-соединение. Это сильно отличается от udp2raw. Все UDP-соединения в udp2raw используют TCP-соединение. Недостаток этого подхода заключается в том, что udp2raw требует дополнительной информации заголовка для различения соединений, что еще больше увеличивает накладные расходы заголовка. По сравнению с чистым UDP, дополнительный заголовок Phantun на пакет составляет 12 байт, а udp2raw согласно моим тестам достигает 44 байт.
Ниже приводится подробное сравнение Phantomun и udp2raw:
Phantun | udp2raw | |
---|---|---|
Обфускация UDP через FakeTCP | ✅ | ✅ |
Обфускация UDP поверх ICMP | ❌ | ✅ |
UDP поверх UDP-микширования | ❌ | ✅ |
многопоточность | ✅ | ❌ |
Пропускная способность | Better | Good |
Режим пересылки уровня 3 | TUN interface | Raw sockets + BPF |
Накладные расходы MTU туннеля | 12 bytes | 44 bytes |
Каждый поток UDP имеет собственное независимое TCP-соединение. | Client/Server | Server only |
Запретить повтор, зашифровать | ❌ | ✅ |
IPv6 | ✅ | ✅ |
Phantun В режиме для Сервериклиент Сервер будет прослушивать порт, например 4567 (через --local
указанный параметр) и UDP Пакеты пересылаются на UDP Сервис (здесь имеется в виду да Сервер WireGuard из Прослушивание порта и адреса, через --remote
спецификация параметров).
клиент также будет прослушивать порт, например 127.0.0.1:4567
(проходить --local
указан параметр) и передать --remote
Параметры и Сервер (например, 10.0.0.1:4567
)Учреждатьсоединять。
клиент Сервер создаст TUN Сетевая карта, клиент TUN Сетевая карта назначена по умолчанию IPv4/IPv6 Адреса 192.168.200.2
и fcc8::2
,Сервер TUN Сетевая карта назначена по умолчанию IPv4/IPv6 Адреса 192.168.201.2
и fcc9::2
。
клиенти Сервер все нужно включить IP переадресации, и необходимо создать соответствующий NAT правило. клиент верен требуется до того, как трафик покинет физический сетевой адаптер. IP 192.168.200.2
руководить SNAT; Сервер требует Воля до того, как трафик попадет на сетевую карту IP DNAT для 192.168.201.2
。
Далее я буду использовать пример, чтобы продемонстрировать, как использовать Phantun Воля WireGuard из UDP трафик, замаскированный под ПТС. Нам нужно установить их отдельно в Сервериклиент. Фантун, ты можешь прийти страница выпуска[3]скачать,Рекомендуется скачать статически скомпилированную версию. phantun_x86_64-unknown-linux-musl.zip
。
гипотеза Сервериз публичной сети IP Адрес 121.36.134.95
,WireGuard Прослушивающий порт 51822
。Сначала измените файл конфигурации /etc/wireguard/wg0.conf
,существовать [Interface]
Добавьте следующую конфигурацию:
MTU = 1300
PreUp = iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
PreUp = RUST_LOG=info phantun_server --local 4567 --remote 127.0.0.1:51822 &> /var/log/phantun_server.log &
PostDown = iptables -t nat -D PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
PostDown = killall phantun_server || true
Тебе нужен Воля eth0 Замените на имя вашей физической сетевой карты Сервериз. МТУ Я не буду сейчас об этом беспокоиться, я расскажу вам, как это отладить позже.
PreUp = iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
Вот этот iptables Представление правил Воля 4567
Порт входящего трафика DNAT для TUN сетевая карта IP адрес.
PreUp = RUST_LOG=info phantun_server --local 4567 --remote 127.0.0.1:51822 &> /var/log/phantun_server.log &
Это начнется здесь phantun_server, мониторинг на 4567
порт и Воля UDP Пакеты пересылаются на WireGuard。
Сервервесьиз WireGuard Конфигурация:
# local settings for Endpoint B
[Interface]
PrivateKey = QH1BJzIZcGo89ZTykxls4i2DKgvByUkHIBy3BES2gX8=
Address = 10.0.0.2/32
ListenPort = 51822
MTU = 1300
PreUp = iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
PreUp = RUST_LOG=info phantun_server --local 4567 --remote 127.0.0.1:51822 &> /var/log/phantun_server.log &
PostDown = iptables -t nat -D PREROUTING -p tcp -i eth0 --dport 4567 -j DNAT --to-destination 192.168.201.2
PostDown = killall phantun_server || true
# remote settings for Endpoint A
[Peer]
PublicKey = wXtD/VrRo92JHc66q4Ypmnd4JpMk7b1Sb0AcT+pJfwY=
AllowedIPs = 10.0.0.1/32
Наконец, перезапустите WireGuard:
$ systemctl restart wg-quick@wg0
гипотезаклиентиз WireGuard Прослушивающий порт 51821
。Сначала измените файл конфигурации /etc/wireguard/wg0.conf
,существовать [Interface]
Добавьте следующую конфигурацию:
MTU = 1300
PreUp = iptables -t nat -A POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
PreUp = RUST_LOG=info phantun_client --local 127.0.0.1:4567 --remote 121.36.134.95:4567 &> /var/log/phantun_client.log &
PostDown = iptables -t nat -D POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
PostDown = killall phantun_client || true
Тебе нужен Воля eth0 Замените на имя вашей физической сетевой карты Сервериз.
PreUp = iptables -t nat -A POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
Вот этот iptables Правила представляют собой пары из 192.168.200.2
(TUN сетевая карта) из Исходящего трафика руководить MASQUERADE。
PreUp = RUST_LOG=info phantun_client --local 127.0.0.1:4567 --remote 121.36.134.95:4567 &> /var/log/phantun_client.log &
Это начнется здесь phantun_client, мониторит 4567
Соединение порта и и Сервера, камуфляж Воля из TCP Пакет данных доставляется на Сервер.
Кроме того, необходимы модификации WireGuard peer из Endpoint, Воля его модификация для 127.0.0.1:4567。
Endpoint = 127.0.0.1:4567
клиентвесьиз WireGuard Конфигурация:
# local settings for Endpoint A
[Interface]
PrivateKey = 0Pyz3cIg2gRt+KxZ0Vm1PvSIU+0FGufPIzv92jTyGWk=
Address = 10.0.0.1/32
ListenPort = 51821
MTU = 1300
PreUp = iptables -t nat -A POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
PreUp = RUST_LOG=info phantun_client --local 127.0.0.1:4567 --remote 121.36.134.95:4567 &> /var/log/phantun_client.log &
PostDown = iptables -t nat -D POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
PostDown = killall phantun_client || true
# remote settings for Endpoint B
[Peer]
PublicKey = m40NDb5Cqtb78b1DVwY1+kxbG2yEcRhxlrLm/DlPpz8=
Endpoint = 127.0.0.1:4567
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25
Наконец, перезапустите WireGuard:
$ systemctl restart wg-quick@wg0
Проверять phantun_client избревно:
$ tail -f /var/log/phantun_client.log
INFO client > Remote address is: 121.36.134.95:4567
INFO client > 1 cores available
INFO client > Created TUN device tun0
INFO client > New UDP client from 127.0.0.1:51821
INFO fake_tcp > Sent SYN to server
INFO fake_tcp > Connection to 121.36.134.95:4567 established
Проверять wg0 интерфейс:
$ wg show wg0
interface: wg0
public key: wXtD/VrRo92JHc66q4Ypmnd4JpMk7b1Sb0AcT+pJfwY=
private key: (hidden)
listening port: 51821
peer: m40NDb5Cqtb78b1DVwY1+kxbG2yEcRhxlrLm/DlPpz8=
endpoint: 127.0.0.1:4567
allowed ips: 10.0.0.2/32
latest handshake: 1 minute, 57 seconds ago
transfer: 184 B received, 648 B sent
persistent keepalive: every 25 seconds
Тестовое подключение:
$ ping 10.0.0.2 -c 3
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=13.7 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=14.4 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=15.0 ms
--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 13.718/14.373/15.047/0.542 ms
Если клиент хочет создать соединение с несколькими Серверами, новая конфигурация из Сервера выглядит следующим образом:
PreUp = RUST_LOG=info phantun_client --local 127.0.0.1:4568 --remote xxxx:4567 --tun-local=192.168.202.1 --tun-peer=192.168.202.2 &> /var/log/phantun_client.log &
PostDown = iptables -t nat -D POSTROUTING -o eth0 -s 192.168.202.2 -j MASQUERADE
Локальный порт прослушивания должен выбрать порт, отличный от предыдущего. Аналогично TUN. сетевая карта Адрес также необходимо изменить.。финальныйиз Конфигурация следующая:
# local settings for Endpoint A
[Interface]
PrivateKey = 0Pyz3cIg2gRt+KxZ0Vm1PvSIU+0FGufPIzv92jTyGWk=
Address = 10.0.0.1/32
ListenPort = 51821
MTU = 1300
PreUp = iptables -t nat -A POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
PreUp = RUST_LOG=info phantun_client --local 127.0.0.1:4567 --remote 121.36.134.95:4567 &> /var/log/phantun_client.log &
PreUp = RUST_LOG=info phantun_client --local 127.0.0.1:4568 --remote xxxx:4567 --tun-local=192.168.202.1 --tun-peer=192.168.202.2 &> /var/log/phantun_client.log &
PostDown = iptables -t nat -D POSTROUTING -o eth0 -s 192.168.200.2 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -s 192.168.202.2 -j MASQUERADE
PostDown = killall phantun_client || true
# remote settings for Endpoint B
[Peer]
PublicKey = m40NDb5Cqtb78b1DVwY1+kxbG2yEcRhxlrLm/DlPpz8=
Endpoint = 127.0.0.1:4567
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25
Если вы используете ping или dig Тестирование с другими инструментами (небольшие пакеты данных) WireGuard туннель может работать нормально, но к браузеру или удаленному рабочему столу (большому пакету данных) нормально не получить доступ, очень вероятно да MTU извопрос,Тебе нужен Воля MTU Уменьшите значение из.
Phantun Официальный совет Воля MTU изнабор значенийдля 1428
(гипотезафизикасетевая карта MTU да 1500), но по моему тесту есть проблема. Рекомендуется задать вопрос напрямую MTU Установить минимальное значение 1280
,затем постепенно увеличивайте,Пока он не работает должным образом,В это время тыиз MTU Просто лучшее соотношение цены и качества.
Вы потерпели неудачу в учебе?
[1]
udp2raw: https://github.com/wangyu-/udp2raw-tunnel
[2]
Phantun: https://github.com/dndx/phantun
[3]
release страница: https://github.com/dndx/phantun/releases
[4]
Phantun - Rust Пишите легко UDP -> TCP Обфускатор: https://www.v2ex.com/t/802949
[5]
Phantun GitHub Repo: https://github.com/dndx/phantun