「HTTP・SOCKS・透過プロキシ・UDP」の版間の差分
Notion-MW |
Notion-MW |
||
1行目: | 1行目: | ||
SOCKS・透過プロキシ・UDP-over-TCPなどを中心に、ネットワークの変更に使えるプロキシ関連の各種技術を雑にまとめた。 | |||
近年はGo製のものが多い。また検閲に対抗するためか、中国系(中国語でissueが投稿されているなど)のものが多い。gost, go-proxy, hysteria, txthinking/socks5, things-go/socks5などはいずれもその2つに当てはまる。たまにロシア系もある。 | 近年はGo製のものが多い。また検閲に対抗するためか、中国系(中国語でissueが投稿されているなど)のものが多い。gost, go-proxy, hysteria, txthinking/socks5, things-go/socks5などはいずれもその2つに当てはまる。たまにロシア系もある。 | ||
35行目: | 37行目: | ||
==== shadowsocks ==== | ==== shadowsocks ==== | ||
SOCKSに暗号化を施した独自プロトコルで、いくつかの実装がある。[https://github.com/shadowsocks/shadowsocks-rust https://github.com/shadowsocks/shadowsocks-rust]などが主流とみられる。 | |||
VPN以外のGFW回避ソフトウェアだとおそらくもっともメジャー。 | |||
サーバーとクライアントに分かれていて、クライアント側では透過プロキシにも対応している。 | サーバーとクライアントに分かれていて、クライアント側では透過プロキシにも対応している。 | ||
53行目: | 55行目: | ||
HTTP・HTTPSのリバースプロキシで、host(HTTPの場合)あるいはsni(HTTPSの場合)に基づいてアクセスを振り分けるものをSNI Proxyと呼ぶことがあるらしい。<strong>Nginx</strong>や<strong>HAProxy</strong>のような汎用のプロキシサーバーでも使える機能だが、これを専門とするソフトウェアもある。 | HTTP・HTTPSのリバースプロキシで、host(HTTPの場合)あるいはsni(HTTPSの場合)に基づいてアクセスを振り分けるものをSNI Proxyと呼ぶことがあるらしい。<strong>Nginx</strong>や<strong>HAProxy</strong>のような汎用のプロキシサーバーでも使える機能だが、これを専門とするソフトウェアもある。 | ||
* | * こんな使い方もある(自分の記事)→ [https://turgenev.hatenablog.com/entry/2025/03/21/020550 【Android】NextDNSをアプリごとに有効無効切り替え+Tailscale経由の自宅鯖を使ってControl D風のトラフィック転送 - turgenev’s blog] | ||
<span id="dlundquistsniproxy"></span> | <span id="dlundquistsniproxy"></span> | ||
80行目: | 82行目: | ||
==== Dante ==== | ==== Dante ==== | ||
[https://www.inet.no/dante/index.html | [https://www.inet.no/dante/index.html Dante - A free SOCKS server] | ||
企業(Inferno Nettverk A/S)によるオープンソースなSOCKS5実装で、有償サポートまであるらしい。見るからに古臭いHPで、メンテされているかどうか不安になるが、つい最近2024年末にもアップデートがあり、次期バージョンの計画についても記載されている。 | 企業(Inferno Nettverk A/S)によるオープンソースなSOCKS5実装で、有償サポートまであるらしい。見るからに古臭いHPで、メンテされているかどうか不安になるが、つい最近2024年末にもアップデートがあり、次期バージョンの計画についても記載されている。 | ||
100行目: | 102行目: | ||
TCP接続(あるいは任意のバイトストリーム)の上にUDP付きのSOCKS5を通すために自分が実装したツール。サーバー側とクライアント側に分かれている。しかし実装した後にgostで同じことができることに気付いた。 | TCP接続(あるいは任意のバイトストリーム)の上にUDP付きのSOCKS5を通すために自分が実装したツール。サーバー側とクライアント側に分かれている。しかし実装した後にgostで同じことができることに気付いた。 | ||
経緯・使い方などは[https://turgenev.hatenablog.com/entry/2024/05/12/231208 root権限のないssh上にUDPを通す方法について(ポートフォワード、SOCKS5プロキシなど) - turgenev’s blog]に書いてある。 | |||
==== 3proxy ==== | ==== 3proxy ==== | ||
[https:// | [https://3proxy.ru/ 3proxy tiny free proxy server for Windows, Linux, Unix: SOCKS, HTTP, FTP proxy] | ||
[https://github.com/3proxy/3proxy https://github.com/3proxy/3proxy] | |||
ロシア系。エラーメッセージなどがかなり不親切だが、ちゃんと動くソフト。 | ロシア系。エラーメッセージなどがかなり不親切だが、ちゃんと動くソフト。 | ||
181行目: | 187行目: | ||
<span id="透過socksプロキシクライアント"></span> | <span id="透過socksプロキシクライアント"></span> | ||
== 透過SOCKSプロキシクライアント == | == 透過SOCKSプロキシクライアント == | ||
[https://turgenev.hatenablog.com/entry/2024/03/25/160556 透過プロキシを用いて特定アプリケーションのTCP・UDP通信をSOCKS5経由にする方法(Windows・Linux(iptables TPROXY)・Androidなど) - turgenev’s blog]で扱った内容。 | |||
バックにSOCKS(SOCKS5)プロキシを用いてTCP・UDPのレイヤで透過プロキシを行うもの。基本的には管理者権限(最低でもCAP_NET_ADMIN)が必要。 | バックにSOCKS(SOCKS5)プロキシを用いてTCP・UDPのレイヤで透過プロキシを行うもの。基本的には管理者権限(最低でもCAP_NET_ADMIN)が必要。 | ||
188行目: | 196行目: | ||
[https://github.com/semigodking/redsocks semigodking/redsocks] (fork元の[https://github.com/darkk/redsocks darkk/redsocks]はメンテされておらず、TCPのTPROXYに非対応) | [https://github.com/semigodking/redsocks semigodking/redsocks] (fork元の[https://github.com/darkk/redsocks darkk/redsocks]はメンテされておらず、TCPのTPROXYに非対応) | ||
* | *nix対応。BSD系で動かすことができたという話は[https://turgenev.hatenablog.com/entry/2024/06/10/134017 FreeBSD/OpenBSD/NetBSDで透過プロキシのredsocksを動かしてみる - turgenev’s blog]に書いた。 | ||
<span id="proxifyre"></span> | <span id="proxifyre"></span> | ||
216行目: | 224行目: | ||
後述のDanteの一部。UDP/TCP両対応。唯一のUDP対応のものである。 | 後述のDanteの一部。UDP/TCP両対応。唯一のUDP対応のものである。 | ||
<syntaxhighlight lang="go">route { | |||
from: 0.0.0.0/0 to: 0.0.0.0/0 via: 192.168.1.1 port = 1080 | |||
}</syntaxhighlight> | |||
こんな感じの<code>/etc/socks.conf</code>を作るか、<code>SOCKS5_SERVER=192.168.1.1:1080 socksify curl http://ipv4.icanhazip.com</code> とかでもよい。 | |||
Macでも動くはずだが、筆者が唯一試したMac環境ではcurlに対してさえうまく動作しなかった(socksifyを使わないのと全く同様に動作するだけだった)(<code>DYLD_FORCE_FLAT_NAMESPACE=1</code>は指定している)。 | |||
<span id="proxychains-ngproxychains"></span> | <span id="proxychains-ngproxychains"></span> | ||
251行目: | 266行目: | ||
== HTTPプロキシ == | == HTTPプロキシ == | ||
Squid, | Squid, Privoxyなどが有名。 | ||
Squidには透過プロキシ機能があるが、redsocksなどとは動作の細かい部分が異なる。[https://turgenev.hatenablog.com/entry/2025/03/25/171736 squidで透過プロキシ(intercept, tproxy)を動かす - turgenev’s blog]に書いた。 | |||
<span id="socks関連の話題"></span> | <span id="socks関連の話題"></span> | ||
259行目: | 276行目: | ||
==== ブラウザのSOCKS5プロキシのWebRTC対応 ==== | ==== ブラウザのSOCKS5プロキシのWebRTC対応 ==== | ||
基本的に現在主流のブラウザ(Firefox, | 基本的に現在主流のブラウザ(Firefox, Chrome)のSOCKS5プロキシ機能(拡張機能で設定する場合を含む)はUDPには対応していないため、Discordの通話などWebRTC関係の機能を使うと生IPが漏洩する(またはそれを防ごうとすると単にその機能が使えない)。これは原理的に実装が不可能なわけではなく、単に需要が少ないから実装されていないだけである。 | ||
* Chromeではどれが最新か不明(最近の物は少ない)。このへんとか?[https://issues.chromium.org/issues/41180783 Chromium] | |||
* torのバグ報告 [https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/issues/151 https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/issues/151] | * torのバグ報告 [https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/issues/151 https://gitlab.torproject.org/tpo/applications/mullvad-browser/-/issues/151] | ||
* firefoxの [https://bugzilla.mozilla.org/show_bug.cgi?id=1808692 https://bugzilla.mozilla.org/show_bug.cgi?id=1808692] | * firefoxの [https://bugzilla.mozilla.org/show_bug.cgi?id=1808692 https://bugzilla.mozilla.org/show_bug.cgi?id=1808692] | ||
** QUIC関連 [https://bugzilla.mozilla.org/show_bug.cgi?id=1882071 https://bugzilla.mozilla.org/show_bug.cgi?id=1882071] | ** QUIC関連 [https://bugzilla.mozilla.org/show_bug.cgi?id=1882071 https://bugzilla.mozilla.org/show_bug.cgi?id=1882071] | ||
** 新しめの包括的なバグレポート [https://bugzilla.mozilla.org/show_bug.cgi?id=1947229 https://bugzilla.mozilla.org/show_bug.cgi?id=1947229] | ** 新しめの包括的なバグレポート [https://bugzilla.mozilla.org/show_bug.cgi?id=1947229 https://bugzilla.mozilla.org/show_bug.cgi?id=1947229] | ||
従って、ブラウザのWebRTCをプロキシさせたい場合はVPNや透過プロキシなどroot/管理者権限が必要な手法を使うことになる。ただしLinux+Firefoxの場合はsocksifyが使えるのでrootが無くても可能。 | |||
<span id="udp-associateリクエストのdstaddrとdstport"></span> | <span id="udp-associateリクエストのdstaddrとdstport"></span> |