From 3fa4809cd1ce65d21e36a18fdbf156e8d1e73c6c Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 7 Jan 2024 17:37:54 +0200 Subject: [PATCH 01/39] [Skip CI] Fix badge Signed-off-by: Vasyl Gello --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 92d0a15..16e0eb7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Yggstack - Yggdrasil as SOCKS proxy / port forwarder -[![Build status](https://github.com/yggdrasil-network/yggstack/actions/workflows/ci.yml/badge.svg)](https://github.com/yggdrasil-network/yggstack/actions/workflows/ci.yml) +[![Build status](https://github.com/yggdrasil-network/yggstack/actions/workflows/trunk.yml/badge.svg)](https://github.com/yggdrasil-network/yggstack/actions/workflows/trunk.yml) ## Introduction From 8f21eaa31a23f470cc76f14ac1b570eb0b430a55 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 7 Jan 2024 17:49:30 +0200 Subject: [PATCH 02/39] [skip ci] Overwrite trunk build artifacts in release Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index c35b084..fbea59b 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -73,6 +73,6 @@ jobs: - name: Publish release run: | - gh release create trunk --prerelease yggstack-* || gh release upload trunk yggstack-* + gh release create trunk --prerelease yggstack-* || gh release upload --clobber trunk yggstack-* env: GH_TOKEN: ${{ github.token }} From f465d71770a07c6a0cca9630ca708fb2b5f8984d Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 14 Jan 2024 06:55:07 +0200 Subject: [PATCH 03/39] [skip CI] Add information about downloads Signed-off-by: Vasyl Gello --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 16e0eb7..5965bec 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,12 @@ Please see our [Installation](https://yggdrasil-network.github.io/installation.h page for more information. You may also find other platform-specific wrappers, scripts or tools in the `contrib` folder. +## Downloading + +Bleeding-edge binaries can be downloaded via [trunk release](https://github.com/yggdrasil-network/yggstack/releases/tag/trunk) + +Tagged releases provide packages similar to Yggdrasil. + ## Building If you want to build from source, as opposed to installing one of the pre-built From 5520ef03bf8b974aae83c3a0392cd3e1bc6093e3 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sun, 28 Jan 2024 11:11:02 +0000 Subject: [PATCH 04/39] Update to Yggdrasil v0.5.5 --- go.mod | 8 ++--- go.sum | 93 +++++++++------------------------------------------------- 2 files changed, 18 insertions(+), 83 deletions(-) diff --git a/go.mod b/go.mod index 256a94d..8d15311 100644 --- a/go.mod +++ b/go.mod @@ -7,12 +7,12 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.4 - github.com/yggdrasil-network/yggdrasil-go v0.5.4 + github.com/yggdrasil-network/yggdrasil-go v0.5.5 gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00 ) require ( - github.com/Arceliar/ironwood v0.0.0-20231127131626-465b82dfb5bd // indirect + github.com/Arceliar/ironwood v0.0.0-20240115190409-ddd1fa67c018 // indirect github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d // indirect github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/bits-and-blooms/bloom/v3 v3.6.0 // indirect @@ -23,10 +23,10 @@ require ( github.com/quic-go/qtls-go1-20 v0.4.1 // indirect github.com/quic-go/quic-go v0.40.1 // indirect go.uber.org/mock v0.4.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.18.0 // indirect golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/net v0.20.0 // indirect golang.org/x/sys v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect diff --git a/go.sum b/go.sum index 9587354..6cb86d1 100644 --- a/go.sum +++ b/go.sum @@ -1,29 +1,20 @@ -github.com/Arceliar/ironwood v0.0.0-20231126105342-ad38416a77c8 h1:qyXiPZClVoe6QsbsiDP23g0Ze/MNXiHIAL/nVNfauH0= -github.com/Arceliar/ironwood v0.0.0-20231126105342-ad38416a77c8/go.mod h1:5x7fWW0mshe9WQ1lvSMmmHBYC3BeHH9gpwW5tz7cbfw= -github.com/Arceliar/ironwood v0.0.0-20231127131626-465b82dfb5bd h1:458tnmZ4zM2gbLtefdYbaxyAJevDNEWu6tLKEqbK4wg= -github.com/Arceliar/ironwood v0.0.0-20231127131626-465b82dfb5bd/go.mod h1:5x7fWW0mshe9WQ1lvSMmmHBYC3BeHH9gpwW5tz7cbfw= +github.com/Arceliar/ironwood v0.0.0-20240115190409-ddd1fa67c018 h1:7r/T7qJht4CaPl74AgU7dG5N6g7+2230/9BhrbtRijk= +github.com/Arceliar/ironwood v0.0.0-20240115190409-ddd1fa67c018/go.mod h1:5x7fWW0mshe9WQ1lvSMmmHBYC3BeHH9gpwW5tz7cbfw= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q= github.com/bits-and-blooms/bitset v1.3.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.5.0 h1:NpE8frKRLGHIcEzkR+gZhiioW1+WbYV6fKwD6ZIpQT8= github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bits-and-blooms/bitset v1.11.0 h1:RMyy2mBBShArUAhfVRZJ2xyBO58KCBCtZFShw3umo6k= -github.com/bits-and-blooms/bitset v1.11.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bits-and-blooms/bloom/v3 v3.3.1 h1:K2+A19bXT8gJR5mU7y+1yW6hsKfNCjcP2uNfLFKncjQ= github.com/bits-and-blooms/bloom/v3 v3.3.1/go.mod h1:bhUUknWd5khVbTe4UgMCSiOOVJzr3tMoijSK3WwvW90= github.com/bits-and-blooms/bloom/v3 v3.6.0 h1:dTU0OVLJSoOhz9m68FTXMFfA39nR8U/nTCs1zb26mOI= github.com/bits-and-blooms/bloom/v3 v3.6.0/go.mod h1:VKlUSvp0lFIYqxJjzdnSsZEw4iHb1kOL2tfHTgyJBHg= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= @@ -32,41 +23,22 @@ github.com/gologme/log v1.3.0 h1:l781G4dE+pbigClDSDzSaaYKtiueHCILUa/qSDsmHAo= github.com/gologme/log v1.3.0/go.mod h1:yKT+DvIPdDdDoPtqFrFxheooyVmoqi0BAsw+erN3wA4= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a h1:fEBsGL/sjAuJrgah5XqmmYsTLzJp/TO9Lhy39gkverk= -github.com/google/pprof v0.0.0-20231101202521-4ca4178f5c7a/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 h1:dHLYa5D8/Ta0aLR2XcPsrkpAgGeFs6thhMcQK0oQ0n8= github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hjson/hjson-go/v4 v4.3.0 h1:dyrzJdqqFGhHt+FSrs5n9s6b0fPM8oSJdWo+oS3YnJw= -github.com/hjson/hjson-go/v4 v4.3.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= -github.com/hjson/hjson-go/v4 v4.3.1 h1:wfmDwHGxjzmYKXRFL0Qr9nonY/Xxe5y7IalwjlY7ekA= -github.com/hjson/hjson-go/v4 v4.3.1/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= github.com/hjson/hjson-go/v4 v4.4.0 h1:D/NPvqOCH6/eisTb5/ztuIS8GUvmpHaLOcNk1Bjr298= github.com/hjson/hjson-go/v4 v4.4.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= -github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= -github.com/onsi/ginkgo/v2 v2.13.1 h1:LNGfMbR2OVGBfXjvRZIZ2YCTQdGKtPLvuI1rMCCj3OU= -github.com/onsi/ginkgo/v2 v2.13.1/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= -github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= -github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/quic-go/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg= -github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.39.3 h1:o3YB6t2SR+HU/pgwF29kJ6g4jJIJEwEZ8CKia1h1TKg= -github.com/quic-go/quic-go v0.39.3/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= -github.com/quic-go/quic-go v0.40.0 h1:GYd1iznlKm7dpHD7pOVpUvItgMPo/jrMgDWZhMCecqw= -github.com/quic-go/quic-go v0.40.0/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= github.com/quic-go/quic-go v0.40.1 h1:X3AGzUNFs0jVuO3esAGnTfvdgvL4fq655WaOi1snv1Q= github.com/quic-go/quic-go v0.40.1/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -77,34 +49,20 @@ github.com/things-go/go-socks5 v0.0.4 h1:jMQjIc+qhD4z9cITOMnBiwo9dDmpGuXmBlkRFrl github.com/things-go/go-socks5 v0.0.4/go.mod h1:sh4K6WHrmHZpjxLTCHyYtXYH8OUuD+yZun41NomR1IQ= github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= -github.com/yggdrasil-network/yggdrasil-go v0.5.3 h1:tfAajYmaiS1L9XevdEC1VUpScpgFfCW7/oEEWxdv5aM= -github.com/yggdrasil-network/yggdrasil-go v0.5.3/go.mod h1:qRzHB8bKEIpd1pQVYoZ+SedJJTBG0X9sbyctWxQDDGA= -github.com/yggdrasil-network/yggdrasil-go v0.5.4 h1:A7ZFmxkkbZhtqJgQXBVDw5sHsi25aUawLlJCCHnNsAs= -github.com/yggdrasil-network/yggdrasil-go v0.5.4/go.mod h1:TLmU4X0nfzCY9t5xABtFQ6GLoOtCae8xVatC9JwjD5I= +github.com/yggdrasil-network/yggdrasil-go v0.5.5 h1:XLuGcnrW++yUUQoS5L7uBbGd8phF4Aq5Col0bcXKm3E= +github.com/yggdrasil-network/yggdrasil-go v0.5.5/go.mod h1:ZeF0o/7MfuM46j9QYdaR8K94D7+9emTUjXhNP/skE9U= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= -go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY= -golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= -golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -112,27 +70,18 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -144,24 +93,14 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY= -golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= -golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -171,9 +110,5 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gvisor.dev/gvisor v0.0.0-20231125084359-4b4191b8cad1 h1:J9340hJZ+P01JeVPK8GatP/6Bk7j2dyLUiKct5k7IBA= -gvisor.dev/gvisor v0.0.0-20231125084359-4b4191b8cad1/go.mod h1:10sU+Uh5KKNv1+2x2A0Gvzt8FjD3ASIhorV3YsauXhk= gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00 h1:CaYh1ABhmDNrDvY7Xs8y4/TqK67I4r3Jb1du+J4PG60= gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00/go.mod h1:10sU+Uh5KKNv1+2x2A0Gvzt8FjD3ASIhorV3YsauXhk= -gvisor.dev/gvisor v0.0.0-20240104232245-1e61310ce61e h1:KNBb7yeP1HRByrH54W1Bw2LCrKualEWp8oQtCJarK00= -gvisor.dev/gvisor v0.0.0-20240104232245-1e61310ce61e/go.mod h1:10sU+Uh5KKNv1+2x2A0Gvzt8FjD3ASIhorV3YsauXhk= From 7b5300a4766f4dd326fdea0efe5da47232c9a176 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 28 Jan 2024 14:09:40 +0200 Subject: [PATCH 05/39] Try to fix gh upload --- .github/workflows/trunk.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index fbea59b..a9756d7 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -73,6 +73,6 @@ jobs: - name: Publish release run: | - gh release create trunk --prerelease yggstack-* || gh release upload --clobber trunk yggstack-* + gh release create trunk --prerelease yggstack-* || gh release upload trunk yggstack-* --clobber env: GH_TOKEN: ${{ github.token }} From edbaa72445c8b16f5904b8b331a921a74e70c1d1 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sun, 24 Mar 2024 19:44:52 +0200 Subject: [PATCH 06/39] Do notvtry to open admin socket in autoconf too Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index 3b7ea9d..41e029a 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -95,6 +95,8 @@ func main() { return case *autoconf: + // Force AdminListen to none in yggstack + cfg.AdminListen = "none" // Use an autoconf-generated config, this will give us random keys and // port numbers, and will use an automatically selected TUN interface. @@ -114,6 +116,7 @@ func main() { _ = f.Close() case *genconf: + // Force AdminListen to none in yggstack cfg.AdminListen = "none" var bs []byte if *confjson { From 174bb7026de09dbb9e0fa480f92e3353c4e42110 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sat, 1 Jun 2024 16:15:03 +0100 Subject: [PATCH 07/39] Update to Yggdrasil v0.5.6 --- go.mod | 23 +++++++++++----------- go.sum | 62 ++++++++++++++++++++++++++++++---------------------------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/go.mod b/go.mod index 8d15311..67f1113 100644 --- a/go.mod +++ b/go.mod @@ -7,28 +7,27 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.4 - github.com/yggdrasil-network/yggdrasil-go v0.5.5 + github.com/yggdrasil-network/yggdrasil-go v0.5.6 gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00 ) require ( - github.com/Arceliar/ironwood v0.0.0-20240115190409-ddd1fa67c018 // indirect + github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2 // indirect github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d // indirect github.com/bits-and-blooms/bitset v1.13.0 // indirect - github.com/bits-and-blooms/bloom/v3 v3.6.0 // indirect + github.com/bits-and-blooms/bloom/v3 v3.7.0 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 // indirect github.com/onsi/ginkgo/v2 v2.13.2 // indirect - github.com/quic-go/qtls-go1-20 v0.4.1 // indirect - github.com/quic-go/quic-go v0.40.1 // indirect + github.com/quic-go/quic-go v0.44.0 // indirect go.uber.org/mock v0.4.0 // indirect - golang.org/x/crypto v0.18.0 // indirect - golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.20.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.16.1 // indirect + golang.org/x/tools v0.21.0 // indirect ) diff --git a/go.sum b/go.sum index 6cb86d1..a94ee98 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,12 @@ -github.com/Arceliar/ironwood v0.0.0-20240115190409-ddd1fa67c018 h1:7r/T7qJht4CaPl74AgU7dG5N6g7+2230/9BhrbtRijk= -github.com/Arceliar/ironwood v0.0.0-20240115190409-ddd1fa67c018/go.mod h1:5x7fWW0mshe9WQ1lvSMmmHBYC3BeHH9gpwW5tz7cbfw= +github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2 h1:SBdYBKeXYUUFef5wi2CMhYmXFVGiYaRpTvbki0Bu+JQ= +github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2/go.mod h1:6WP4799FX0OuWdENGQAh+0RXp9FLh0y7NZ7tM9cJyXk= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q= -github.com/bits-and-blooms/bitset v1.3.1/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bits-and-blooms/bitset v1.5.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bits-and-blooms/bloom/v3 v3.3.1/go.mod h1:bhUUknWd5khVbTe4UgMCSiOOVJzr3tMoijSK3WwvW90= -github.com/bits-and-blooms/bloom/v3 v3.6.0 h1:dTU0OVLJSoOhz9m68FTXMFfA39nR8U/nTCs1zb26mOI= -github.com/bits-and-blooms/bloom/v3 v3.6.0/go.mod h1:VKlUSvp0lFIYqxJjzdnSsZEw4iHb1kOL2tfHTgyJBHg= +github.com/bits-and-blooms/bloom/v3 v3.7.0 h1:VfknkqV4xI+PsaDIsoHueyxVDZrfvMn56jeWUzvzdls= +github.com/bits-and-blooms/bloom/v3 v3.7.0/go.mod h1:VKlUSvp0lFIYqxJjzdnSsZEw4iHb1kOL2tfHTgyJBHg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -37,10 +34,8 @@ github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= -github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= -github.com/quic-go/quic-go v0.40.1 h1:X3AGzUNFs0jVuO3esAGnTfvdgvL4fq655WaOi1snv1Q= -github.com/quic-go/quic-go v0.40.1/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= +github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= +github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= @@ -49,60 +44,67 @@ github.com/things-go/go-socks5 v0.0.4 h1:jMQjIc+qhD4z9cITOMnBiwo9dDmpGuXmBlkRFrl github.com/things-go/go-socks5 v0.0.4/go.mod h1:sh4K6WHrmHZpjxLTCHyYtXYH8OUuD+yZun41NomR1IQ= github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= -github.com/yggdrasil-network/yggdrasil-go v0.5.5 h1:XLuGcnrW++yUUQoS5L7uBbGd8phF4Aq5Col0bcXKm3E= -github.com/yggdrasil-network/yggdrasil-go v0.5.5/go.mod h1:ZeF0o/7MfuM46j9QYdaR8K94D7+9emTUjXhNP/skE9U= +github.com/yggdrasil-network/yggdrasil-go v0.5.6 h1:thh5YQYXQgkhkSO6v2D9Ya9fLHXfY38VfsCTZTIbIeI= +github.com/yggdrasil-network/yggdrasil-go v0.5.6/go.mod h1:WAqMZ4e1QSf/EKbzfD77XXTSAIRO/0nWKCVpHsKLg40= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= From dcc0284e3bbf73a62b658558fa4daf1c92cb9817 Mon Sep 17 00:00:00 2001 From: Artem Andreenko Date: Wed, 22 May 2024 15:41:40 -0700 Subject: [PATCH 08/39] Implemented UNIX socket support for SOCKS5 server in yggstack command and updated README.md with usage instructions. --- README.md | 6 +++++ cmd/yggstack/main.go | 62 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 5965bec..e52d91b 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,12 @@ To run SOCKS proxy server listening on local port 1080 using generated configura ./yggstack -useconffile /path/to/yggdrasil.conf -socks 127.0.0.1:1080 ``` +To run SOCKS proxy server listening on UNIX socket file `/tmp/yggstack.sock`: + +``` +./yggstack -useconffile /path/to/yggdrasil.conf -socks /tmp/yggstack.sock +``` + To expose network services (like a Web server) listening on local port 8080 to Yggdrasil network address at port 80: diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index 41e029a..aff7ae0 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -5,6 +5,7 @@ import ( "crypto/ed25519" "encoding/hex" "encoding/json" + "errors" "flag" "fmt" "net" @@ -31,9 +32,10 @@ import ( ) type node struct { - core *core.Core - multicast *multicast.Multicast - admin *admin.AdminSocket + core *core.Core + multicast *multicast.Multicast + admin *admin.AdminSocket + socks5Listener net.Listener } // The main function is responsible for configuring and starting Yggdrasil. @@ -52,7 +54,7 @@ func main() { getsnet := flag.Bool("subnet", false, "use in combination with either -useconf or -useconffile, outputs your IPv6 subnet") getpkey := flag.Bool("publickey", false, "use in combination with either -useconf or -useconffile, outputs your public key") loglevel := flag.String("loglevel", "info", "loglevel to enable") - socks := flag.String("socks", "", "address to listen on for SOCKS, i.e. :1080") + socks := flag.String("socks", "", "address to listen on for SOCKS, i.e. :1080; or UNIX socket file path, i.e. /tmp/yggstack.sock") nameserver := flag.String("nameserver", "", "the Yggdrasil IPv6 address to use as a DNS server for SOCKS") flag.Var(&expose, "exposetcp", "TCP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") flag.Parse() @@ -271,17 +273,45 @@ func main() { // Create SOCKS server { - if socks != nil && nameserver != nil && *socks != "" { - resolver := types.NewNameResolver(s, *nameserver) - socksOptions := []socks5.Option{ - socks5.WithDial(s.DialContext), - socks5.WithResolver(resolver), + if socks != nil { + if nameserver != nil { + if strings.Contains(*socks, ":") { + logger.Infof("Starting SOCKS server on %s", *socks) + resolver := types.NewNameResolver(s, *nameserver) + socksOptions := []socks5.Option{ + socks5.WithDial(s.DialContext), + socks5.WithResolver(resolver), + } + if logger.GetLevel("debug") { + socksOptions = append(socksOptions, socks5.WithLogger(logger)) + } + server := socks5.NewServer(socksOptions...) + go server.ListenAndServe("tcp", *socks) // nolint:errcheck + } else { + logger.Infof("Starting SOCKS server with socket file %s", *socks) + _, err := os.Stat(*socks) + if os.IsNotExist(err) { + n.socks5Listener, err = net.Listen("unix", *socks) + if err != nil { + panic(err) + } + resolver := types.NewNameResolver(s, *nameserver) + socksOptions := []socks5.Option{ + socks5.WithDial(s.DialContext), + socks5.WithResolver(resolver), + } + if logger.GetLevel("debug") { + socksOptions = append(socksOptions, socks5.WithLogger(logger)) + } + server := socks5.NewServer(socksOptions...) + go server.Serve(n.socks5Listener) // nolint:errcheck + } else if err != nil { + logger.Errorf("Cannot create socket file %s: %s", *socks, err) + } else { + panic(errors.New(fmt.Sprintf("Socket file %s already exists", *socks))) + } + } } - if logger.GetLevel("debug") { - socksOptions = append(socksOptions, socks5.WithLogger(logger)) - } - server := socks5.NewServer(socksOptions...) - go server.ListenAndServe("tcp", *socks) // nolint:errcheck } } @@ -317,6 +347,10 @@ func main() { // Shut down the node. _ = n.admin.Stop() _ = n.multicast.Stop() + if n.socks5Listener != nil { + _ = n.socks5Listener.Close() + logger.Infof("Stopped UNIX socket listener") + } n.core.Stop() } From 582fe511fac0ea645e240109022e2ab35fb7d921 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 15 Jul 2024 13:15:22 +0300 Subject: [PATCH 09/39] Fix unix domain socket creation/cleanup logic * If there is another instance still listening on the same Unix domain socket, bail out * If there is a leftover from crashed yggstack etc, clean the socket file and proceed Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 94 ++++++++++++++++++++++++++++---------------- 1 file changed, 61 insertions(+), 33 deletions(-) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index aff7ae0..31598f6 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -12,6 +12,7 @@ import ( "os" "os/signal" "regexp" + "runtime" "strings" "syscall" @@ -273,44 +274,48 @@ func main() { // Create SOCKS server { - if socks != nil { - if nameserver != nil { - if strings.Contains(*socks, ":") { - logger.Infof("Starting SOCKS server on %s", *socks) - resolver := types.NewNameResolver(s, *nameserver) - socksOptions := []socks5.Option{ - socks5.WithDial(s.DialContext), - socks5.WithResolver(resolver), - } - if logger.GetLevel("debug") { - socksOptions = append(socksOptions, socks5.WithLogger(logger)) - } - server := socks5.NewServer(socksOptions...) - go server.ListenAndServe("tcp", *socks) // nolint:errcheck - } else { - logger.Infof("Starting SOCKS server with socket file %s", *socks) - _, err := os.Stat(*socks) - if os.IsNotExist(err) { - n.socks5Listener, err = net.Listen("unix", *socks) + if socks != nil && *socks != "" { + socksOptions := []socks5.Option{ + socks5.WithDial(s.DialContext), + } + if nameserver != nil && *nameserver != "" { + resolver := types.NewNameResolver(s, *nameserver) + socksOptions = append(socksOptions, socks5.WithResolver(resolver)) + } else { + logger.Infof("DNS nameserver is not set!") + logger.Infof("SOCKS server will not be able to resolve hostnames other than .pk.ygg !") + } + if logger.GetLevel("debug") { + socksOptions = append(socksOptions, socks5.WithLogger(logger)) + } + server := socks5.NewServer(socksOptions...) + if strings.Contains(*socks, ":") { + logger.Infof("Starting SOCKS server on %s", *socks) + go server.ListenAndServe("tcp", *socks) // nolint:errcheck + } else { + logger.Infof("Starting SOCKS server with socket file %s", *socks) + n.socks5Listener, err = net.Listen("unix", *socks) + if err != nil { + // If address in use, try connecting to + // the socket to see if other yggstack + // instance is listening on it + + if isErrorAddressAlreadyInUse(err) { + _, err = net.Dial("unix", *socks) if err != nil { - panic(err) + // Unlink dead socket if not connected + err = os.RemoveAll(*socks) + if err != nil { + panic(err) + } + } else { + panic(fmt.Errorf("Another yggstack instance is listening on socket '%s'", *socks)) } - resolver := types.NewNameResolver(s, *nameserver) - socksOptions := []socks5.Option{ - socks5.WithDial(s.DialContext), - socks5.WithResolver(resolver), - } - if logger.GetLevel("debug") { - socksOptions = append(socksOptions, socks5.WithLogger(logger)) - } - server := socks5.NewServer(socksOptions...) - go server.Serve(n.socks5Listener) // nolint:errcheck - } else if err != nil { - logger.Errorf("Cannot create socket file %s: %s", *socks, err) } else { - panic(errors.New(fmt.Sprintf("Socket file %s already exists", *socks))) + panic(err) } } + go server.Serve(n.socks5Listener) // nolint:errcheck } } } @@ -349,11 +354,34 @@ func main() { _ = n.multicast.Stop() if n.socks5Listener != nil { _ = n.socks5Listener.Close() + _ = os.RemoveAll(*socks) logger.Infof("Stopped UNIX socket listener") } n.core.Stop() } +// Helper to detect if socket address is in use +// https://stackoverflow.com/a/52152912 +func isErrorAddressAlreadyInUse(err error) bool { + var eOsSyscall *os.SyscallError + if !errors.As(err, &eOsSyscall) { + return false + } + var errErrno syscall.Errno // doesn't need a "*" (ptr) because it's already a ptr (uintptr) + if !errors.As(eOsSyscall, &errErrno) { + return false + } + if errors.Is(errErrno, syscall.EADDRINUSE) { + return true + } + const WSAEADDRINUSE = 10048 + if runtime.GOOS == "windows" && errErrno == WSAEADDRINUSE { + return true + } + return false +} + +// Helper to set logging level func setLogLevel(loglevel string, logger *log.Logger) { levels := [...]string{"error", "warn", "info", "debug", "trace"} loglevel = strings.ToLower(loglevel) From b160b3f66d3f5f1f83fbb954ab9950fed7e72f7d Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 15 Jul 2024 13:30:25 +0300 Subject: [PATCH 10/39] Add UDP port exposure Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 73 ++++++++++++++++++++++++++++++++++++--- src/types/mapping.go | 60 ++++++++++++++++++++++++++++++++ src/types/mapping_test.go | 38 +++++++++++++++----- src/types/udpproxy.go | 22 ++++++++++++ 4 files changed, 181 insertions(+), 12 deletions(-) create mode 100644 src/types/udpproxy.go diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index 31598f6..7d6ca98 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -14,6 +14,7 @@ import ( "regexp" "runtime" "strings" + "sync" "syscall" "github.com/gologme/log" @@ -39,9 +40,15 @@ type node struct { socks5Listener net.Listener } +type UDPSession struct { + conn *net.UDPConn + remoteAddr net.Addr +} + // The main function is responsible for configuring and starting Yggdrasil. func main() { - var expose types.TCPMappings + var exposetcp types.TCPMappings + var exposeudp types.UDPMappings genconf := flag.Bool("genconf", false, "print a new config to stdout") useconf := flag.Bool("useconf", false, "read HJSON/JSON config from stdin") useconffile := flag.String("useconffile", "", "read HJSON/JSON config from specified file path") @@ -57,7 +64,8 @@ func main() { loglevel := flag.String("loglevel", "info", "loglevel to enable") socks := flag.String("socks", "", "address to listen on for SOCKS, i.e. :1080; or UNIX socket file path, i.e. /tmp/yggstack.sock") nameserver := flag.String("nameserver", "", "the Yggdrasil IPv6 address to use as a DNS server for SOCKS") - flag.Var(&expose, "exposetcp", "TCP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") + flag.Var(&exposetcp, "exposetcp", "TCP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") + flag.Var(&exposeudp, "exposeudp", "UDP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") flag.Parse() // Catch interrupts from the operating system to exit gracefully. @@ -322,13 +330,13 @@ func main() { // Create TCP mappings { - for _, mapping := range expose { + for _, mapping := range exposetcp { go func(mapping types.TCPMapping) { listener, err := s.ListenTCP(mapping.Listen) if err != nil { panic(err) } - logger.Infof("Mapping Yggdrasil port %d to %s", mapping.Listen.Port, mapping.Mapped) + logger.Infof("Mapping Yggdrasil TCP port %d to %s", mapping.Listen.Port, mapping.Mapped) for { c, err := listener.Accept() if err != nil { @@ -346,6 +354,63 @@ func main() { } } + // Create UDP mappings + { + for _, mapping := range exposeudp { + go func(mapping types.UDPMapping) { + mtu := n.core.MTU() + udpListenConn, err := s.ListenUDP(mapping.Listen) + if err != nil { + panic(err) + } + logger.Infof("Mapping Yggdrasil UDP port %d to %s", mapping.Listen.Port, mapping.Mapped) + remoteUdpConnections := new(sync.Map) + udpBuffer := make([]byte, mtu) + for { + bytesRead, remoteUdpAddr, err := udpListenConn.ReadFrom(udpBuffer) + if err != nil { + if bytesRead == 0 { + continue + } + } + + remoteUdpAddrStr := remoteUdpAddr.String() + + connVal, ok := remoteUdpConnections.Load(remoteUdpAddrStr) + + if !ok { + logger.Infof("Creating new session for %s", remoteUdpAddr.String()) + udpFwdConn, err := net.DialUDP("udp", nil, mapping.Mapped) + if err != nil { + logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) + continue + } + udpSession := &UDPSession{ + conn: udpFwdConn, + remoteAddr: remoteUdpAddr, + } + remoteUdpConnections.Store(remoteUdpAddrStr, udpSession) + go types.ReverseProxyUDP(mtu, udpListenConn, remoteUdpAddr, *udpFwdConn) + } + + + udpSession, ok := connVal.(*UDPSession) + if !ok { + continue + } + + _, err = udpSession.conn.Write(udpBuffer[:bytesRead]) + if err != nil { + logger.Debugf("Cannot write from yggdrasil to udp listener: %q", err) + udpSession.conn.Close() + remoteUdpConnections.Delete(remoteUdpAddrStr) + continue + } + } + }(mapping) + } + } + // Block until we are told to shut down. <-ctx.Done() diff --git a/src/types/mapping.go b/src/types/mapping.go index 0d2dd3d..03e99c3 100644 --- a/src/types/mapping.go +++ b/src/types/mapping.go @@ -66,3 +66,63 @@ func (m *TCPMappings) Set(value string) error { *m = append(*m, mapping) return nil } + +type UDPMapping struct { + Listen *net.UDPAddr + Mapped *net.UDPAddr +} + +type UDPMappings []UDPMapping + +func (m *UDPMappings) String() string { + return "" +} + +func (m *UDPMappings) Set(value string) error { + tokens := strings.Split(value, ":") + if len(tokens) > 2 { + tokens = strings.SplitN(value, ":", 2) + host, port, err := net.SplitHostPort(tokens[1]) + if err != nil { + return fmt.Errorf("failed to split host and port: %w", err) + } + tokens = append(tokens[:1], host, port) + } + listenport, err := strconv.Atoi(tokens[0]) + if err != nil { + return fmt.Errorf("listen port is invalid: %w", err) + } + if listenport == 0 { + return fmt.Errorf("listen port must not be zero") + } + mapping := UDPMapping{ + Listen: &net.UDPAddr{ + Port: listenport, + }, + Mapped: &net.UDPAddr{ + IP: net.IPv6loopback, + Port: listenport, + }, + } + tokens = tokens[1:] + if len(tokens) > 0 { + mappedaddr := net.ParseIP(tokens[0]) + if mappedaddr == nil { + return fmt.Errorf("invalid mapped address %q", tokens[0]) + } + mapping.Mapped.IP = mappedaddr + tokens = tokens[1:] + } + if len(tokens) > 0 { + mappedport, err := strconv.Atoi(tokens[0]) + if err != nil { + return fmt.Errorf("mapped port is invalid: %w", err) + } + if mappedport == 0 { + return fmt.Errorf("mapped port must not be zero") + } + mapping.Mapped.Port = mappedport + } + *m = append(*m, mapping) + return nil +} diff --git a/src/types/mapping_test.go b/src/types/mapping_test.go index b96c0e6..23e68b6 100644 --- a/src/types/mapping_test.go +++ b/src/types/mapping_test.go @@ -3,26 +3,48 @@ package types import "testing" func TestEndpointMappings(t *testing.T) { - var mappings TCPMappings - if err := mappings.Set("1234"); err != nil { + var tcpMappings TCPMappings + if err := tcpMappings.Set("1234"); err != nil { t.Fatal(err) } - if err := mappings.Set("1234:192.168.1.1"); err != nil { + if err := tcpMappings.Set("1234:192.168.1.1"); err != nil { t.Fatal(err) } - if err := mappings.Set("1234:192.168.1.1:4321"); err != nil { + if err := tcpMappings.Set("1234:192.168.1.1:4321"); err != nil { t.Fatal(err) } - if err := mappings.Set("1234:[2000::1]:4321"); err != nil { + if err := tcpMappings.Set("1234:[2000::1]:4321"); err != nil { t.Fatal(err) } - if err := mappings.Set("a"); err == nil { + if err := tcpMappings.Set("a"); err == nil { t.Fatal("'a' should be an invalid exposed port") } - if err := mappings.Set("1234:localhost"); err == nil { + if err := tcpMappings.Set("1234:localhost"); err == nil { t.Fatal("mapped address must be an IP literal") } - if err := mappings.Set("1234:localhost:a"); err == nil { + if err := tcpMappings.Set("1234:localhost:a"); err == nil { + t.Fatal("'a' should be an invalid mapped port") + } + var udpMappings UDPMappings + if err := udpMappings.Set("1234"); err != nil { + t.Fatal(err) + } + if err := udpMappings.Set("1234:192.168.1.1"); err != nil { + t.Fatal(err) + } + if err := udpMappings.Set("1234:192.168.1.1:4321"); err != nil { + t.Fatal(err) + } + if err := udpMappings.Set("1234:[2000::1]:4321"); err != nil { + t.Fatal(err) + } + if err := udpMappings.Set("a"); err == nil { + t.Fatal("'a' should be an invalid exposed port") + } + if err := udpMappings.Set("1234:localhost"); err == nil { + t.Fatal("mapped address must be an IP literal") + } + if err := udpMappings.Set("1234:localhost:a"); err == nil { t.Fatal("'a' should be an invalid mapped port") } } diff --git a/src/types/udpproxy.go b/src/types/udpproxy.go new file mode 100644 index 0000000..7fc4375 --- /dev/null +++ b/src/types/udpproxy.go @@ -0,0 +1,22 @@ +package types + +import ( + "net" +) + +func ReverseProxyUDP(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.UDPConn) error { + buf := make([]byte, mtu) + for { + n, err := src.Read(buf[:]) + if err != nil { + return err + } + if n > 0 { + n, err = dst.WriteTo(buf[:n], dstAddr) + if err != nil { + return err + } + } + } + return nil +} From 30d51ba566235cd802a1412758d082504b5d5a4a Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Thu, 18 Jul 2024 11:48:42 +0300 Subject: [PATCH 11/39] Try to fix #4 ... by catching TCP RST packets in WritePackets and sending them during the next WritePackets call where no RST packet is being sent Signed-off-by: Vasyl Gello --- src/netstack/yggdrasil.go | 59 ++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/netstack/yggdrasil.go b/src/netstack/yggdrasil.go index 3a582aa..5c68d8c 100644 --- a/src/netstack/yggdrasil.go +++ b/src/netstack/yggdrasil.go @@ -12,6 +12,7 @@ import ( "gvisor.dev/gvisor/pkg/tcpip/header" "gvisor.dev/gvisor/pkg/tcpip/network/ipv6" "gvisor.dev/gvisor/pkg/tcpip/stack" + "gvisor.dev/gvisor/pkg/tcpip/transport/tcp" ) type YggdrasilNIC struct { @@ -20,15 +21,17 @@ type YggdrasilNIC struct { dispatcher stack.NetworkDispatcher readBuf []byte writeBuf []byte + rstPackets chan *stack.PacketBuffer } func (s *YggdrasilNetstack) NewYggdrasilNIC(ygg *core.Core) tcpip.Error { rwc := ipv6rwc.NewReadWriteCloser(ygg) mtu := rwc.MTU() nic := &YggdrasilNIC{ - ipv6rwc: rwc, - readBuf: make([]byte, mtu), - writeBuf: make([]byte, mtu), + ipv6rwc: rwc, + readBuf: make([]byte, mtu), + writeBuf: make([]byte, mtu), + rstPackets: make(chan *stack.PacketBuffer, 100), } if err := s.stack.CreateNIC(1, nic); err != nil { return err @@ -48,6 +51,15 @@ func (s *YggdrasilNetstack) NewYggdrasilNIC(ygg *core.Core) tcpip.Error { nic.dispatcher.DeliverNetworkPacket(ipv6.ProtocolNumber, pkb) } }() + go func() { + for { + pkt := <- nic.rstPackets + if pkt == nil { + continue + } + _ = nic.writePacket(pkt) + } + }() _, snet, err := net.ParseCIDR("0200::/7") if err != nil { return &tcpip.ErrBadAddress{} @@ -93,21 +105,48 @@ func (*YggdrasilNIC) LinkAddress() tcpip.LinkAddress { return "" } func (*YggdrasilNIC) Wait() {} +func (e *YggdrasilNIC) writePacket( + pkt *stack.PacketBuffer, +) tcpip.Error { + // We need to recover from panic() here because + // parser in ToView() gets confused on some packets + // without payload and panics + defer func() { + r := recover() + if r != nil { + } + }() + vv := pkt.ToView() + n, err := vv.Read(e.writeBuf) + if err != nil { + return &tcpip.ErrAborted{} + } + _, err = e.ipv6rwc.Write(e.writeBuf[:n]) + if err != nil { + return &tcpip.ErrAborted{} + } + return nil +} + func (e *YggdrasilNIC) WritePackets( list stack.PacketBufferList, ) (int, tcpip.Error) { var i int = 0 + var err tcpip.Error = nil for i, pkt := range list.AsSlice() { - vv := pkt.ToView() - n, err := vv.Read(e.writeBuf) - if err != nil { - log.Println(err) - return i - 1, &tcpip.ErrAborted{} + if pkt.Data().Size() == 0 { + if pkt.Network().TransportProtocol() == tcp.ProtocolNumber { + tcpHeader := header.TCP(pkt.TransportHeader().Slice()) + if (tcpHeader.Flags() & header.TCPFlagRst) == header.TCPFlagRst { + e.rstPackets <- pkt + continue + } + } } - _, err = e.ipv6rwc.Write(e.writeBuf[:n]) + err = e.writePacket(pkt) if err != nil { log.Println(err) - return i - 1, &tcpip.ErrAborted{} + return i - 1, err } } From 0783b429fd1678fc994ca3c54e3625e3df5ff400 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Thu, 18 Jul 2024 22:24:46 +0300 Subject: [PATCH 12/39] [WIP] Introduce TCP/UDP local/remote port forwarding Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 126 ++++++++++-- src/types/mapping.go | 391 +++++++++++++++++++++++++++++++------- src/types/mapping_test.go | 60 ++++++ src/types/udpproxy.go | 19 +- 4 files changed, 514 insertions(+), 82 deletions(-) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index 7d6ca98..ef9d02a 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -40,15 +40,22 @@ type node struct { socks5Listener net.Listener } -type UDPSession struct { - conn *net.UDPConn +type UDPConnSession struct { + conn *net.UDPConn + remoteAddr net.Addr +} + +type UDPPacketConnSession struct { + conn *net.PacketConn remoteAddr net.Addr } // The main function is responsible for configuring and starting Yggdrasil. func main() { - var exposetcp types.TCPMappings - var exposeudp types.UDPMappings + var localtcp types.TCPLocalMappings + var localudp types.UDPLocalMappings + var remotetcp types.TCPRemoteMappings + var remoteudp types.UDPRemoteMappings genconf := flag.Bool("genconf", false, "print a new config to stdout") useconf := flag.Bool("useconf", false, "read HJSON/JSON config from stdin") useconffile := flag.String("useconffile", "", "read HJSON/JSON config from specified file path") @@ -64,8 +71,10 @@ func main() { loglevel := flag.String("loglevel", "info", "loglevel to enable") socks := flag.String("socks", "", "address to listen on for SOCKS, i.e. :1080; or UNIX socket file path, i.e. /tmp/yggstack.sock") nameserver := flag.String("nameserver", "", "the Yggdrasil IPv6 address to use as a DNS server for SOCKS") - flag.Var(&exposetcp, "exposetcp", "TCP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") - flag.Var(&exposeudp, "exposeudp", "UDP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") + flag.Var(&localtcp, "local-tcp", "TCP ports to forward to the remote Yggdradil node, e.g. 22:[a:b:c:d]:22, 127.0.0.1:22:[a:b:c:d]:22") + flag.Var(&localudp, "local-udp", "UDP ports to forward to the remote Yggdrasil node, e.g. 22:[a:b:c:d]:2022, 127.0.0.1:[a:b:c:d]:22") + flag.Var(&remotetcp, "remote-tcp", "TCP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") + flag.Var(&remoteudp, "remote-udp", "UDP ports to expose to the network, e.g. 22, 2022:22, 22:192.168.1.1:2022") flag.Parse() // Catch interrupts from the operating system to exit gracefully. @@ -328,9 +337,96 @@ func main() { } } - // Create TCP mappings + // Create local TCP mappings (forwarding connections from local port + // to remote Yggdrasil node) { - for _, mapping := range exposetcp { + for _, mapping := range localtcp { + go func(mapping types.TCPMapping) { + listener, err := net.ListenTCP("tcp", mapping.Listen) + if err != nil { + panic(err) + } + logger.Infof("Mapping local TCP port %d to Yggdrasil %s", mapping.Listen.Port, mapping.Mapped) + for { + c, err := listener.Accept() + if err != nil { + panic(err) + } + r, err := s.DialTCP(mapping.Mapped) + if err != nil { + logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) + _ = c.Close() + continue + } + go types.ProxyTCP(n.core.MTU(), c, r) + } + }(mapping) + } + } + + // Create local UDP mappings (forwarding connections from local port + // to remote Yggdrasil node) + { + for _, mapping := range localudp { + go func(mapping types.UDPMapping) { + mtu := n.core.MTU() + udpListenConn, err := net.ListenUDP("udp", mapping.Listen) + if err != nil { + panic(err) + } + logger.Infof("Mapping local UDP port %d to Yggdrasil %s", mapping.Listen.Port, mapping.Mapped) + localUdpConnections := new(sync.Map) + udpBuffer := make([]byte, mtu) + for { + bytesRead, remoteUdpAddr, err := udpListenConn.ReadFrom(udpBuffer) + if err != nil { + if bytesRead == 0 { + continue + } + } + + remoteUdpAddrStr := remoteUdpAddr.String() + + connVal, ok := localUdpConnections.Load(remoteUdpAddrStr) + + if !ok { + logger.Infof("Creating new session for %s", remoteUdpAddr.String()) + udpFwdConn, err := s.DialUDP(mapping.Mapped) + if err != nil { + logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) + continue + } + udpSession := &UDPPacketConnSession{ + conn: &udpFwdConn, + remoteAddr: remoteUdpAddr, + } + localUdpConnections.Store(remoteUdpAddrStr, udpSession) + go types.ReverseProxyUDPPacketConn(mtu, udpListenConn, remoteUdpAddr, udpFwdConn) + } + + udpSession, ok := connVal.(*UDPPacketConnSession) + if !ok { + continue + } + + udpFwdConn := *udpSession.conn + + _, err = udpFwdConn.WriteTo(udpBuffer[:bytesRead], mapping.Mapped) + if err != nil { + logger.Debugf("Cannot write from yggdrasil to udp listener: %q", err) + udpFwdConn.Close() + localUdpConnections.Delete(remoteUdpAddrStr) + continue + } + } + }(mapping) + } + } + + // Create remote TCP mappings (forwarding connections from Yggdrasil + // node to local port) + { + for _, mapping := range remotetcp { go func(mapping types.TCPMapping) { listener, err := s.ListenTCP(mapping.Listen) if err != nil { @@ -354,9 +450,10 @@ func main() { } } - // Create UDP mappings + // Create remote UDP mappings (forwarding connections from Yggdrasil + // node to local port) { - for _, mapping := range exposeudp { + for _, mapping := range remoteudp { go func(mapping types.UDPMapping) { mtu := n.core.MTU() udpListenConn, err := s.ListenUDP(mapping.Listen) @@ -385,16 +482,15 @@ func main() { logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) continue } - udpSession := &UDPSession{ - conn: udpFwdConn, + udpSession := &UDPConnSession{ + conn: udpFwdConn, remoteAddr: remoteUdpAddr, } remoteUdpConnections.Store(remoteUdpAddrStr, udpSession) - go types.ReverseProxyUDP(mtu, udpListenConn, remoteUdpAddr, *udpFwdConn) + go types.ReverseProxyUDPConn(mtu, udpListenConn, remoteUdpAddr, *udpFwdConn) } - - udpSession, ok := connVal.(*UDPSession) + udpSession, ok := connVal.(*UDPConnSession) if !ok { continue } diff --git a/src/types/mapping.go b/src/types/mapping.go index 03e99c3..015755f 100644 --- a/src/types/mapping.go +++ b/src/types/mapping.go @@ -7,62 +7,269 @@ import ( "strings" ) +func parseMappingString(value string) (first_address string, first_port int, second_address string, second_port int, err error) { + var first_port_string string = "" + var second_port_string string = "" + + tokens := strings.Split(value, ":") + tokens_len := len(tokens) + + // If token count is 1, then it is first and second port the same + + if tokens_len == 1 { + first_port, err = strconv.Atoi(tokens[0]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + second_port = first_port + } + + // If token count is 2, then it is : + + if tokens_len == 2 { + first_port, err = strconv.Atoi(tokens[0]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + second_port, err = strconv.Atoi(tokens[1]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + } + + // If token count is 3, parse it as + // :: + + if tokens_len == 3 { + first_port, err = strconv.Atoi(tokens[0]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + second_address, second_port_string, err = net.SplitHostPort( + tokens[1] + ":" + tokens[2]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + second_port, err = strconv.Atoi(second_port_string) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + } + + // If token count is 4, parse it as + // ::: + + if tokens_len == 4 { + first_address, first_port_string, err = net.SplitHostPort( + tokens[0] + ":" + tokens[1]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + second_address, second_port_string, err = net.SplitHostPort( + tokens[0] + ":" + tokens[1]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + first_port, err = strconv.Atoi(first_port_string) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + second_port, err = strconv.Atoi(second_port_string) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + } + + if tokens_len > 4 { + // Last token needs to be the second_port + + second_port, err = strconv.Atoi(tokens[tokens_len-1]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + + // Cut seen tokens + + tokens = tokens[:tokens_len-1] + tokens_len = len(tokens) + + if strings.HasSuffix(tokens[tokens_len-1], "]") { + // Reverse-walk over tokens to find the end of + // numeric ipv6 address + + for i := tokens_len - 1; i >= 0; i-- { + if strings.HasPrefix(tokens[i], "[") { + // Store second address + second_address = strings.Join(tokens[i:], ":") + second_address, _ = strings.CutPrefix(second_address, "[") + second_address, _ = strings.CutSuffix(second_address, "]") + // Cut seen tokens + tokens = tokens[:i] + // break from loop + break + } + } + } else { + // next is second address in non-numerical-ipv6 form + second_address = tokens[tokens_len-1] + tokens = tokens[:tokens_len-1] + } + + tokens_len = len(tokens) + + if tokens_len < 1 { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + + // Last token needs to be the first_port + + first_port, err = strconv.Atoi(tokens[tokens_len-1]) + if err != nil { + return "", 0, "", 0, fmt.Errorf("Malformed mapping spec '%s'", value) + } + + // Cut seen tokens + + tokens = tokens[:tokens_len-1] + tokens_len = len(tokens) + + if tokens_len > 0 { + if strings.HasSuffix(tokens[tokens_len-1], "]") { + // Reverse-walk over tokens to find the end of + // numeric ipv6 address + + for i := tokens_len - 1; i >= 0; i-- { + if strings.HasPrefix(tokens[i], "[") { + // Store first address + first_address = strings.Join(tokens[i:], ":") + first_address, _ = strings.CutPrefix(first_address, "[") + first_address, _ = strings.CutSuffix(first_address, "]") + // break from loop + break + } + } + } else { + // next is first address in non-numerical-ipv6 form + first_address = tokens[tokens_len-1] + } + } + } + + if first_port == 0 || second_port == 0 { + return "", 0, "", 0, fmt.Errorf("Ports must not be zero") + } + + return first_address, first_port, second_address, second_port, nil +} + type TCPMapping struct { Listen *net.TCPAddr Mapped *net.TCPAddr } -type TCPMappings []TCPMapping +type TCPLocalMappings []TCPMapping -func (m *TCPMappings) String() string { +func (m *TCPLocalMappings) String() string { return "" } -func (m *TCPMappings) Set(value string) error { - tokens := strings.Split(value, ":") - if len(tokens) > 2 { - tokens = strings.SplitN(value, ":", 2) - host, port, err := net.SplitHostPort(tokens[1]) - if err != nil { - return fmt.Errorf("failed to split host and port: %w", err) - } - tokens = append(tokens[:1], host, port) - } - listenport, err := strconv.Atoi(tokens[0]) +func (m *TCPLocalMappings) Set(value string) error { + first_address, first_port, second_address, second_port, err := + parseMappingString(value) + if err != nil { - return fmt.Errorf("listen port is invalid: %w", err) + return err } - if listenport == 0 { - return fmt.Errorf("listen port must not be zero") + + // First address can be ipv4/ipv6 + // Second address can be only Yggdrasil ipv6 + + if !strings.Contains(second_address, ":") { + return fmt.Errorf("Yggdrasil listening address can be only IPv6") } + + // Create mapping + mapping := TCPMapping{ Listen: &net.TCPAddr{ - Port: listenport, + Port: first_port, }, Mapped: &net.TCPAddr{ IP: net.IPv6loopback, - Port: listenport, + Port: second_port, }, } - tokens = tokens[1:] - if len(tokens) > 0 { - mappedaddr := net.ParseIP(tokens[0]) + + if first_address != "" { + listenaddr := net.ParseIP(first_address) + if listenaddr == nil { + return fmt.Errorf("invalid listen address %q", first_address) + } + mapping.Listen.IP = listenaddr + } + + if second_address != "" { + mappedaddr := net.ParseIP(second_address) if mappedaddr == nil { - return fmt.Errorf("invalid mapped address %q", tokens[0]) + return fmt.Errorf("invalid mapped address %q", second_address) + } + // TODO: Filter Yggdrasil IPs here + mapping.Mapped.IP = mappedaddr + } + + *m = append(*m, mapping) + return nil +} + +type TCPRemoteMappings []TCPMapping + +func (m *TCPRemoteMappings) String() string { + return "" +} + +func (m *TCPRemoteMappings) Set(value string) error { + first_address, first_port, second_address, second_port, err := + parseMappingString(value) + + if err != nil { + return err + } + + // First address must be empty + // Second address can be ipv4/ipv6 + + if first_address != "" { + return fmt.Errorf("Yggdrasil listening must be empty") + } + + // Create mapping + + mapping := TCPMapping{ + Listen: &net.TCPAddr{ + Port: first_port, + }, + Mapped: &net.TCPAddr{ + IP: net.IPv6loopback, + Port: second_port, + }, + } + + if first_address != "" { + listenaddr := net.ParseIP(first_address) + if listenaddr == nil { + return fmt.Errorf("invalid listen address %q", first_address) + } + mapping.Listen.IP = listenaddr + } + + if second_address != "" { + mappedaddr := net.ParseIP(second_address) + if mappedaddr == nil { + return fmt.Errorf("invalid mapped address %q", second_address) } mapping.Mapped.IP = mappedaddr - tokens = tokens[1:] - } - if len(tokens) > 0 { - mappedport, err := strconv.Atoi(tokens[0]) - if err != nil { - return fmt.Errorf("mapped port is invalid: %w", err) - } - if mappedport == 0 { - return fmt.Errorf("mapped port must not be zero") - } - mapping.Mapped.Port = mappedport } + *m = append(*m, mapping) return nil } @@ -72,57 +279,109 @@ type UDPMapping struct { Mapped *net.UDPAddr } -type UDPMappings []UDPMapping +type UDPLocalMappings []UDPMapping -func (m *UDPMappings) String() string { +func (m *UDPLocalMappings) String() string { return "" } -func (m *UDPMappings) Set(value string) error { - tokens := strings.Split(value, ":") - if len(tokens) > 2 { - tokens = strings.SplitN(value, ":", 2) - host, port, err := net.SplitHostPort(tokens[1]) - if err != nil { - return fmt.Errorf("failed to split host and port: %w", err) - } - tokens = append(tokens[:1], host, port) - } - listenport, err := strconv.Atoi(tokens[0]) +func (m *UDPLocalMappings) Set(value string) error { + first_address, first_port, second_address, second_port, err := + parseMappingString(value) + if err != nil { - return fmt.Errorf("listen port is invalid: %w", err) + return err } - if listenport == 0 { - return fmt.Errorf("listen port must not be zero") + + // First address can be ipv4/ipv6 + // Second address can be only Yggdrasil ipv6 + + if !strings.Contains(second_address, ":") { + return fmt.Errorf("Yggdrasil listening address can be only IPv6") } + + // Create mapping + mapping := UDPMapping{ Listen: &net.UDPAddr{ - Port: listenport, + Port: first_port, }, Mapped: &net.UDPAddr{ IP: net.IPv6loopback, - Port: listenport, + Port: second_port, }, } - tokens = tokens[1:] - if len(tokens) > 0 { - mappedaddr := net.ParseIP(tokens[0]) + + if first_address != "" { + listenaddr := net.ParseIP(first_address) + if listenaddr == nil { + return fmt.Errorf("invalid listen address %q", first_address) + } + mapping.Listen.IP = listenaddr + } + + if second_address != "" { + mappedaddr := net.ParseIP(second_address) if mappedaddr == nil { - return fmt.Errorf("invalid mapped address %q", tokens[0]) + return fmt.Errorf("invalid mapped address %q", second_address) } + // TODO: Filter Yggdrasil IPs here mapping.Mapped.IP = mappedaddr - tokens = tokens[1:] - } - if len(tokens) > 0 { - mappedport, err := strconv.Atoi(tokens[0]) - if err != nil { - return fmt.Errorf("mapped port is invalid: %w", err) - } - if mappedport == 0 { - return fmt.Errorf("mapped port must not be zero") - } - mapping.Mapped.Port = mappedport } + + *m = append(*m, mapping) + return nil +} + +type UDPRemoteMappings []UDPMapping + +func (m *UDPRemoteMappings) String() string { + return "" +} + +func (m *UDPRemoteMappings) Set(value string) error { + first_address, first_port, second_address, second_port, err := + parseMappingString(value) + + if err != nil { + return err + } + + // First address must be empty + // Second address can be ipv4/ipv6 + + if first_address != "" { + return fmt.Errorf("Yggdrasil listening must be empty") + } + + // Create mapping + + mapping := UDPMapping{ + Listen: &net.UDPAddr{ + Port: first_port, + }, + Mapped: &net.UDPAddr{ + IP: net.IPv6loopback, + Port: second_port, + }, + } + + if first_address != "" { + listenaddr := net.ParseIP(first_address) + if listenaddr == nil { + return fmt.Errorf("invalid listen address %q", first_address) + } + mapping.Listen.IP = listenaddr + } + + if second_address != "" { + mappedaddr := net.ParseIP(second_address) + if mappedaddr == nil { + return fmt.Errorf("invalid mapped address %q", second_address) + } + mapping.Mapped.IP = mappedaddr + } + *m = append(*m, mapping) return nil } diff --git a/src/types/mapping_test.go b/src/types/mapping_test.go index 23e68b6..accc273 100644 --- a/src/types/mapping_test.go +++ b/src/types/mapping_test.go @@ -13,18 +13,48 @@ func TestEndpointMappings(t *testing.T) { if err := tcpMappings.Set("1234:192.168.1.1:4321"); err != nil { t.Fatal(err) } + if err := tcpMappings.Set("192.168.1.2:1234:192.168.1.1:4321"); err != nil { + t.Fatal(err) + } if err := tcpMappings.Set("1234:[2000::1]:4321"); err != nil { t.Fatal(err) } + if err := tcpMappings.Set("[2001:1]:1234:[2000::1]:4321"); err != nil { + t.Fatal(err) + } if err := tcpMappings.Set("a"); err == nil { t.Fatal("'a' should be an invalid exposed port") } if err := tcpMappings.Set("1234:localhost"); err == nil { t.Fatal("mapped address must be an IP literal") } + if err := tcpMappings.Set("127.0.0.1:1234:localhost"); err == nil { + t.Fatal("mapped address must be an IP literal") + } + if err := tcpMappings.Set("[2000:1]:1234:localhost"); err == nil { + t.Fatal("mapped address must be an IP literal") + } + if err := tcpMappings.Set("localhost:1234:127.0.0.1"); err == nil { + t.Fatal("listen address must be an IP literal") + } + if err := tcpMappings.Set("localhost:1234:127.0.0.1"); err == nil { + t.Fatal("listen address must be an IP literal") + } + if err := tcpMappings.Set("localhost:1234:[2000:1]"); err == nil { + t.Fatal("listen address must be an IP literal") + } + if err := tcpMappings.Set("localhost:1234:[2000:1]"); err == nil { + t.Fatal("listen address must be an IP literal") + } if err := tcpMappings.Set("1234:localhost:a"); err == nil { t.Fatal("'a' should be an invalid mapped port") } + if err := tcpMappings.Set("127.0.0.1:1234:127.0.0.1:a"); err == nil { + t.Fatal("'a' should be an invalid mapped port") + } + if err := tcpMappings.Set("[2000::1]:1234:[2000::1]:a"); err == nil { + t.Fatal("'a' should be an invalid mapped port") + } var udpMappings UDPMappings if err := udpMappings.Set("1234"); err != nil { t.Fatal(err) @@ -35,16 +65,46 @@ func TestEndpointMappings(t *testing.T) { if err := udpMappings.Set("1234:192.168.1.1:4321"); err != nil { t.Fatal(err) } + if err := udpMappings.Set("192.168.1.2:1234:192.168.1.1:4321"); err != nil { + t.Fatal(err) + } if err := udpMappings.Set("1234:[2000::1]:4321"); err != nil { t.Fatal(err) } + if err := udpMappings.Set("[2001:1]:1234:[2000::1]:4321"); err != nil { + t.Fatal(err) + } if err := udpMappings.Set("a"); err == nil { t.Fatal("'a' should be an invalid exposed port") } if err := udpMappings.Set("1234:localhost"); err == nil { t.Fatal("mapped address must be an IP literal") } + if err := udpMappings.Set("127.0.0.1:1234:localhost"); err == nil { + t.Fatal("mapped address must be an IP literal") + } + if err := udpMappings.Set("[2000:1]:1234:localhost"); err == nil { + t.Fatal("mapped address must be an IP literal") + } + if err := udpMappings.Set("localhost:1234:127.0.0.1"); err == nil { + t.Fatal("listen address must be an IP literal") + } + if err := udpMappings.Set("localhost:1234:127.0.0.1"); err == nil { + t.Fatal("listen address must be an IP literal") + } + if err := udpMappings.Set("localhost:1234:[2000:1]"); err == nil { + t.Fatal("listen address must be an IP literal") + } + if err := udpMappings.Set("localhost:1234:[2000:1]"); err == nil { + t.Fatal("listen address must be an IP literal") + } if err := udpMappings.Set("1234:localhost:a"); err == nil { t.Fatal("'a' should be an invalid mapped port") } + if err := udpMappings.Set("127.0.0.1:1234:127.0.0.1:a"); err == nil { + t.Fatal("'a' should be an invalid mapped port") + } + if err := udpMappings.Set("[2000::1]:1234:[2000::1]:a"); err == nil { + t.Fatal("'a' should be an invalid mapped port") + } } diff --git a/src/types/udpproxy.go b/src/types/udpproxy.go index 7fc4375..005cbac 100644 --- a/src/types/udpproxy.go +++ b/src/types/udpproxy.go @@ -4,7 +4,7 @@ import ( "net" ) -func ReverseProxyUDP(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.UDPConn) error { +func ReverseProxyUDPConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.UDPConn) error { buf := make([]byte, mtu) for { n, err := src.Read(buf[:]) @@ -20,3 +20,20 @@ func ReverseProxyUDP(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.U } return nil } + +func ReverseProxyUDPPacketConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.PacketConn) error { + buf := make([]byte, mtu) + for { + n, _, err := src.ReadFrom(buf[:]) + if err != nil { + return err + } + if n > 0 { + n, err = dst.WriteTo(buf[:n], dstAddr) + if err != nil { + return err + } + } + } + return nil +} From f529064aa03a742d236cd1a022a5233be3007e43 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Fri, 19 Jul 2024 07:08:28 +0300 Subject: [PATCH 13/39] Refactor UDP port forwarding and document usage --- README.md | 33 +++++++++++++++++++++++++++++---- cmd/yggstack/main.go | 37 +++++++++++++++++++------------------ src/netstack/netstack.go | 6 +++--- src/types/udpproxy.go | 19 +------------------ 4 files changed, 52 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index e52d91b..02cbbbf 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,8 @@ other configuration such as listen addresses or multicast addresses, etc. ### Run Yggstack -To run SOCKS proxy server listening on local port 1080 using generated configuration: +To run SOCKS proxy server listening on local port 1080 using generated +configuration (like `ssh -D`): ``` ./yggstack -useconffile /path/to/yggdrasil.conf -socks 127.0.0.1:1080 @@ -84,11 +85,35 @@ To run SOCKS proxy server listening on UNIX socket file `/tmp/yggstack.sock`: ./yggstack -useconffile /path/to/yggdrasil.conf -socks /tmp/yggstack.sock ``` -To expose network services (like a Web server) listening on local port 8080 to Yggdrasil -network address at port 80: +To expose network services (like a Web server) listening on local port 8080 +to Yggdrasil network address at port 80 (like `ssh -R`): + +TCP: ``` -./yggstack -useconffile /path/to/yggdrasil.conf -exposetcp 80:127.0.0.1:8080 +./yggstack -useconffile /path/to/yggdrasil.conf -remote-tcp 80:127.0.0.1:8080 +``` + +UDP: + +``` +./yggstack -useconffile /path/to/yggdrasil.conf -remote-udp 53:127.0.0.1:53 +``` + +To forward remote port on some other Yggdrasil node to local machine (like `ssh -L`): + +TCP: + +``` +./yggstack -useconffile /path/to/yggdrasil.conf -local-tcp 127.0.0.1:8080::8080 +./yggstack -useconffile /path/to/yggdrasil.conf -local-tcp [::1]:8080::8080 +``` + +UDP: + +``` +./yggstack -useconffile /path/to/yggdrasil.conf -local-udp 127.0.0.1:5353::53 +./yggstack -useconffile /path/to/yggdrasil.conf -local-udp [::1]:5353::53 ``` To run as a standalone node without SOCKS server or TCP port forwarding: diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index ef9d02a..0992109 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -31,6 +31,8 @@ import ( "github.com/yggdrasil-network/yggstack/src/netstack" "github.com/yggdrasil-network/yggstack/src/types" + + "gvisor.dev/gvisor/pkg/tcpip/adapters/gonet" ) type node struct { @@ -40,13 +42,8 @@ type node struct { socks5Listener net.Listener } -type UDPConnSession struct { - conn *net.UDPConn - remoteAddr net.Addr -} - -type UDPPacketConnSession struct { - conn *net.PacketConn +type UDPSession struct { + conn interface{} remoteAddr net.Addr } @@ -396,22 +393,23 @@ func main() { logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) continue } - udpSession := &UDPPacketConnSession{ - conn: &udpFwdConn, + udpSession := &UDPSession{ + conn: udpFwdConn, remoteAddr: remoteUdpAddr, } localUdpConnections.Store(remoteUdpAddrStr, udpSession) - go types.ReverseProxyUDPPacketConn(mtu, udpListenConn, remoteUdpAddr, udpFwdConn) + go types.ReverseProxyUDP(mtu, udpListenConn, remoteUdpAddr, udpFwdConn) } - udpSession, ok := connVal.(*UDPPacketConnSession) + udpSession, ok := connVal.(*UDPSession) if !ok { continue } - udpFwdConn := *udpSession.conn + udpFwdConnPtr := udpSession.conn.(*gonet.UDPConn) + udpFwdConn := *udpFwdConnPtr - _, err = udpFwdConn.WriteTo(udpBuffer[:bytesRead], mapping.Mapped) + _, err = udpFwdConn.Write(udpBuffer[:bytesRead]) if err != nil { logger.Debugf("Cannot write from yggdrasil to udp listener: %q", err) udpFwdConn.Close() @@ -482,23 +480,26 @@ func main() { logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) continue } - udpSession := &UDPConnSession{ + udpSession := &UDPSession{ conn: udpFwdConn, remoteAddr: remoteUdpAddr, } remoteUdpConnections.Store(remoteUdpAddrStr, udpSession) - go types.ReverseProxyUDPConn(mtu, udpListenConn, remoteUdpAddr, *udpFwdConn) + go types.ReverseProxyUDP(mtu, udpListenConn, remoteUdpAddr, udpFwdConn) } - udpSession, ok := connVal.(*UDPConnSession) + udpSession, ok := connVal.(*UDPSession) if !ok { continue } - _, err = udpSession.conn.Write(udpBuffer[:bytesRead]) + udpFwdConnPtr := udpSession.conn.(*net.UDPConn) + udpFwdConn := *udpFwdConnPtr + + _, err = udpFwdConn.Write(udpBuffer[:bytesRead]) if err != nil { logger.Debugf("Cannot write from yggdrasil to udp listener: %q", err) - udpSession.conn.Close() + udpFwdConn.Close() remoteUdpConnections.Delete(remoteUdpAddrStr) continue } diff --git a/src/netstack/netstack.go b/src/netstack/netstack.go index 42fb056..9b723d9 100644 --- a/src/netstack/netstack.go +++ b/src/netstack/netstack.go @@ -86,12 +86,12 @@ func (s *YggdrasilNetstack) DialContext(ctx context.Context, network, address st } } -func (s *YggdrasilNetstack) DialTCP(addr *net.TCPAddr) (net.Conn, error) { +func (s *YggdrasilNetstack) DialTCP(addr *net.TCPAddr) (*gonet.TCPConn, error) { fa, pn, _ := convertToFullAddr(addr.IP, addr.Port) return gonet.DialTCP(s.stack, fa, pn) } -func (s *YggdrasilNetstack) DialUDP(addr *net.UDPAddr) (net.PacketConn, error) { +func (s *YggdrasilNetstack) DialUDP(addr *net.UDPAddr) (*gonet.UDPConn, error) { fa, pn, _ := convertToFullAddr(addr.IP, addr.Port) return gonet.DialUDP(s.stack, nil, &fa, pn) } @@ -101,7 +101,7 @@ func (s *YggdrasilNetstack) ListenTCP(addr *net.TCPAddr) (net.Listener, error) { return gonet.ListenTCP(s.stack, fa, pn) } -func (s *YggdrasilNetstack) ListenUDP(addr *net.UDPAddr) (net.PacketConn, error) { +func (s *YggdrasilNetstack) ListenUDP(addr *net.UDPAddr) (*gonet.UDPConn, error) { fa, pn, _ := convertToFullAddr(addr.IP, addr.Port) return gonet.DialUDP(s.stack, &fa, nil, pn) } diff --git a/src/types/udpproxy.go b/src/types/udpproxy.go index 005cbac..a291b60 100644 --- a/src/types/udpproxy.go +++ b/src/types/udpproxy.go @@ -4,7 +4,7 @@ import ( "net" ) -func ReverseProxyUDPConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.UDPConn) error { +func ReverseProxyUDP(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.Conn) error { buf := make([]byte, mtu) for { n, err := src.Read(buf[:]) @@ -20,20 +20,3 @@ func ReverseProxyUDPConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src n } return nil } - -func ReverseProxyUDPPacketConn(mtu uint64, dst net.PacketConn, dstAddr net.Addr, src net.PacketConn) error { - buf := make([]byte, mtu) - for { - n, _, err := src.ReadFrom(buf[:]) - if err != nil { - return err - } - if n > 0 { - n, err = dst.WriteTo(buf[:n], dstAddr) - if err != nil { - return err - } - } - } - return nil -} From 457b1d99c59a7d63323821e82511e229145f8185 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Fri, 19 Jul 2024 14:11:52 +0300 Subject: [PATCH 14/39] Build Linux static executables with musl-cross (except ppc64, ppc64le) Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index a9756d7..b543d79 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -28,6 +28,18 @@ jobs: with: go-version: "1.21" + - name: Download and install musl toolchain for Linux + run: | + sudo mkdir -p /opt/x-tools + pushd /tmp + curl -s "https://api.github.com/repos/musl-cross/musl-cross/releases/latest" | + jq -r '.assets[] | .browser_download_url' | while read -r LINK; do + TARBALL="$(basename "$LINK")" + curl -L -o "$TARBALL" "$LINK" + sudo tar -xf "$TARBALL" -C /opt/x-tools + done + popd + - name: Build static executables run: | GOOS=windows GOARCH=arm GOARM=7 ./build -o yggstack-windows-armv7.exe @@ -47,6 +59,17 @@ jobs: GOOS=linux GOARCH=ppc64le ./build -o yggstack-linux-ppc64le GOOS=linux GOARCH=riscv64 ./build -o yggstack-linux-riscv64 GOOS=linux GOARCH=s390x ./build -o yggstack-linux-s390x + CC="/opt/x-tools/x86_64-multilib-linux-musl/bin/x86_64-multilib-linux-musl-gcc" CFLAGS="-m32" GOOS=linux GOARCH=386 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-i386-musl-static + CC="/opt/x-tools/x86_64-multilib-linux-musl/bin/x86_64-multilib-linux-musl-gcc" GOOS=linux GOARCH=amd64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-amd64-musl-static + CC="/opt/x-tools/arm-unknown-linux-musleabi/bin/arm-unknown-linux-musleabi-gcc" GOOS=linux GOARCH=arm GOARM=6 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv6-musl-static + CC="/opt/x-tools/arm-unknown-linux-musleabi/bin/arm-unknown-linux-musleabi-gcc" GOOS=linux GOARCH=arm GOARM=7 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv7-musl-static + CC="/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-gcc" GOOS=linux GOARCH=arm64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-arm64-musl-static + CC="/opt/x-tools/mips-unknown-linux-muslsf/bin/mips-unknown-linux-muslsf-gcc" GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips-sf-musl-static + CC="/opt/x-tools/mipsel-unknown-linux-muslsf/bin/mipsel-unknown-linux-muslsf-gcc" GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mipsle-sf-musl-static + CC="/opt/x-tools/mips64-unknown-linux-musl/bin/mips64-unknown-linux-musl-gcc" GOOS=linux GOARCH=mips64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64-musl-static + CC="/opt/x-tools/mips64el-unknown-linux-musl/bin/mips64el-unknown-linux-musl-gcc" GOOS=linux GOARCH=mips64le ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64le-musl-static + CC="/opt/x-tools/riscv64-unknown-linux-musl/bin/riscv64-unknown-linux-musl-gcc" GOOS=linux GOARCH=riscv64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-riscv64-musl-static + CC="/opt/x-tools/s390x-ibm-linux-musl/bin/s390x-ibm-linux-musl-gcc" GOOS=linux GOARCH=s390x ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-s390x-musl-static GOOS=darwin GOARCH=arm64 ./build -o yggstack-darwin-arm64 GOOS=darwin GOARCH=amd64 ./build -o yggstack-darwin-amd64 GOOS=freebsd GOARCH=arm64 ./build -o yggstack-freebsd-arm64 From 5008a4ea2d13aa5d043689b11830b4d30c1efa75 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 22 Jul 2024 07:23:16 +0300 Subject: [PATCH 15/39] Do not leak sessions Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index 0992109..cab711a 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -387,7 +387,7 @@ func main() { connVal, ok := localUdpConnections.Load(remoteUdpAddrStr) if !ok { - logger.Infof("Creating new session for %s", remoteUdpAddr.String()) + logger.Debugf("Creating new session for %s", remoteUdpAddr.String()) udpFwdConn, err := s.DialUDP(mapping.Mapped) if err != nil { logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) @@ -474,7 +474,7 @@ func main() { connVal, ok := remoteUdpConnections.Load(remoteUdpAddrStr) if !ok { - logger.Infof("Creating new session for %s", remoteUdpAddr.String()) + logger.Debugf("Creating new session for %s", remoteUdpAddr.String()) udpFwdConn, err := net.DialUDP("udp", nil, mapping.Mapped) if err != nil { logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) From 2c09a1d7b21d68439404d961c422c7285d435d36 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Tue, 23 Jul 2024 22:44:14 +0300 Subject: [PATCH 16/39] Fix .pk.ygg resolver after refactoring Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index cab711a..19fbad9 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -292,12 +292,13 @@ func main() { socksOptions := []socks5.Option{ socks5.WithDial(s.DialContext), } - if nameserver != nil && *nameserver != "" { + if nameserver != nil { + if *nameserver == "" { + logger.Infof("DNS nameserver is not set!") + logger.Infof("SOCKS server will not be able to resolve hostnames other than .pk.ygg !") + } resolver := types.NewNameResolver(s, *nameserver) socksOptions = append(socksOptions, socks5.WithResolver(resolver)) - } else { - logger.Infof("DNS nameserver is not set!") - logger.Infof("SOCKS server will not be able to resolve hostnames other than .pk.ygg !") } if logger.GetLevel("debug") { socksOptions = append(socksOptions, socks5.WithLogger(logger)) From 8a6c67475c0b73b20ccce0c90c86bd1e878c3092 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Wed, 24 Jul 2024 17:00:42 +0300 Subject: [PATCH 17/39] Switch back to glibc for static builds Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 208 +++++++++++++++++++++++++++++++----- 1 file changed, 181 insertions(+), 27 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index b543d79..32a1d19 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -17,7 +17,7 @@ jobs: fail-fast: false name: Build Windows/Linux/MacOS/FreeBSD/Android - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: @@ -28,71 +28,225 @@ jobs: with: go-version: "1.21" - - name: Download and install musl toolchain for Linux + - name: Download and install cross-tools run: | - sudo mkdir -p /opt/x-tools - pushd /tmp - curl -s "https://api.github.com/repos/musl-cross/musl-cross/releases/latest" | - jq -r '.assets[] | .browser_download_url' | while read -r LINK; do - TARBALL="$(basename "$LINK")" - curl -L -o "$TARBALL" "$LINK" - sudo tar -xf "$TARBALL" -C /opt/x-tools - done - popd + sudo apt-get update + sudo apt-get install \ + crossbuild-essential-armhf \ + crossbuild-essential-arm64 \ + crossbuild-essential-i386 \ + crossbuild-essential-mips \ + crossbuild-essential-mipsel \ + crossbuild-essential-mips64 \ + crossbuild-essential-mips64el \ + crossbuild-essential-riscv64 \ + crossbuild-essential-s390x - - name: Build static executables + - name: Build yggstack executables run: | + echo "::group::yggstack-windows-armv7.exe" GOOS=windows GOARCH=arm GOARM=7 ./build -o yggstack-windows-armv7.exe + echo "::endgroup::" + # + echo "::group::yggstack-windows-arm64.exe" GOOS=windows GOARCH=arm64 ./build -o yggstack-windows-arm64.exe + echo "::endgroup::" + # + echo "::group::yggstack-windows-i386.exe" GOOS=windows GOARCH=386 ./build -o yggstack-windows-i386.exe + echo "::endgroup::" + # + echo "::group::yggstack-windows-amd64.exe" GOOS=windows GOARCH=amd64 ./build -o yggstack-windows-amd64.exe + echo "::endgroup::" + # + echo "::group::yggstack-linux-i386" GOOS=linux GOARCH=386 ./build -o yggstack-linux-i386 + echo "::endgroup::" + # + echo "::group::yggstack-linux-amd64" GOOS=linux GOARCH=amd64 ./build -o yggstack-linux-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-armv6" GOOS=linux GOARCH=arm GOARM=6 ./build -o yggstack-linux-armv6 + echo "::endgroup::" + # + echo "::group::yggstack-linux-armv7" GOOS=linux GOARCH=arm GOARM=7 ./build -o yggstack-linux-armv7 + echo "::endgroup::" + # + echo "::group::yggstack-linux-arm64" GOOS=linux GOARCH=arm64 ./build -o yggstack-linux-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips-sf" GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -o yggstack-linux-mips-sf + echo "::endgroup::" + # + echo "::group::yggstack-linux-mipsle-sf" GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -o yggstack-linux-mipsle-sf + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips64" GOOS=linux GOARCH=mips64 ./build -o yggstack-linux-mips64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips64le" GOOS=linux GOARCH=mips64le ./build -o yggstack-linux-mips64le + echo "::endgroup::" + # + echo "::group::yggstack-linux-ppc64" GOOS=linux GOARCH=ppc64 ./build -o yggstack-linux-ppc64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-ppc64le" GOOS=linux GOARCH=ppc64le ./build -o yggstack-linux-ppc64le + echo "::endgroup::" + # + echo "::group::yggstack-linux-riscv64" GOOS=linux GOARCH=riscv64 ./build -o yggstack-linux-riscv64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-s390x" GOOS=linux GOARCH=s390x ./build -o yggstack-linux-s390x - CC="/opt/x-tools/x86_64-multilib-linux-musl/bin/x86_64-multilib-linux-musl-gcc" CFLAGS="-m32" GOOS=linux GOARCH=386 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-i386-musl-static - CC="/opt/x-tools/x86_64-multilib-linux-musl/bin/x86_64-multilib-linux-musl-gcc" GOOS=linux GOARCH=amd64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-amd64-musl-static - CC="/opt/x-tools/arm-unknown-linux-musleabi/bin/arm-unknown-linux-musleabi-gcc" GOOS=linux GOARCH=arm GOARM=6 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv6-musl-static - CC="/opt/x-tools/arm-unknown-linux-musleabi/bin/arm-unknown-linux-musleabi-gcc" GOOS=linux GOARCH=arm GOARM=7 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv7-musl-static - CC="/opt/x-tools/aarch64-unknown-linux-musl/bin/aarch64-unknown-linux-musl-gcc" GOOS=linux GOARCH=arm64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-arm64-musl-static - CC="/opt/x-tools/mips-unknown-linux-muslsf/bin/mips-unknown-linux-muslsf-gcc" GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips-sf-musl-static - CC="/opt/x-tools/mipsel-unknown-linux-muslsf/bin/mipsel-unknown-linux-muslsf-gcc" GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mipsle-sf-musl-static - CC="/opt/x-tools/mips64-unknown-linux-musl/bin/mips64-unknown-linux-musl-gcc" GOOS=linux GOARCH=mips64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64-musl-static - CC="/opt/x-tools/mips64el-unknown-linux-musl/bin/mips64el-unknown-linux-musl-gcc" GOOS=linux GOARCH=mips64le ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64le-musl-static - CC="/opt/x-tools/riscv64-unknown-linux-musl/bin/riscv64-unknown-linux-musl-gcc" GOOS=linux GOARCH=riscv64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-riscv64-musl-static - CC="/opt/x-tools/s390x-ibm-linux-musl/bin/s390x-ibm-linux-musl-gcc" GOOS=linux GOARCH=s390x ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-s390x-musl-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-i386-static" + CGO_ENABLED=1 CC="/usr/bin/i686-linux-gnu-gcc" GOOS=linux GOARCH=386 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-i386-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-amd64-static" + CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-amd64-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-armv6-static" + CGO_ENABLED=1 CC="/usr/bin/arm-linux-gnueabihf-gcc" GOOS=linux GOARCH=arm GOARM=6 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv6-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-armv7-static" + CGO_ENABLED=1 CC="/usr/bin/arm-linux-gnueabihf-gcc" GOOS=linux GOARCH=arm GOARM=7 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv7-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-arm64-static" + CGO_ENABLED=1 CC="/usr/bin/aarch64-linux-gnu-gcc" GOOS=linux GOARCH=arm64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-arm64-static + echo "::endgroup::" + # + #echo "::group::yggstack-linux-mips-sf-static" + #CGO_ENABLED=1 CC="/usr/bin/mips-linux-gnu-gcc" GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips-sf-static + #echo "::endgroup::" + # + #echo "::group::yggstack-linux-mipsle-sf-static" + #CGO_ENABLED=1 CC="/usr/bin/mipsel-linux-gnu-gcc" GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mipsle-sf-static + #echo "::endgroup::" + # + echo "::group::yggstack-linux-mips64-static" + CGO_ENABLED=1 CC="/usr/bin/mips64-linux-gnuabi64-gcc" GOOS=linux GOARCH=mips64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips64le-static" + CGO_ENABLED=1 CC="/usr/bin/mips64el-linux-gnuabi64-gcc" GOOS=linux GOARCH=mips64le ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64le-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-riscv64-static" + CGO_ENABLED=1 CC="/usr/bin/riscv64-linux-gnu-gcc" GOOS=linux GOARCH=riscv64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-riscv64-static + echo "::endgroup::" + # + echo "::group::yggstack-linux-s390x-static" + CGO_ENABLED=1 CC="/usr/bin/s390x-linux-gnu-gcc" GOOS=linux GOARCH=s390x ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-s390x-static + echo "::endgroup::" + # + echo "::group::yggstack-darwin-arm64" GOOS=darwin GOARCH=arm64 ./build -o yggstack-darwin-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-darwin-amd64" GOOS=darwin GOARCH=amd64 ./build -o yggstack-darwin-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-freebsd-arm64" GOOS=freebsd GOARCH=arm64 ./build -o yggstack-freebsd-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-freebsd-amd64" GOOS=freebsd GOARCH=amd64 ./build -o yggstack-freebsd-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-freebsd-armv6" GOOS=freebsd GOARCH=arm GOARM=6 ./build -o yggstack-freebsd-armv6 + echo "::endgroup::" + # + echo "::group::yggstack-freebsd-armv7" GOOS=freebsd GOARCH=arm GOARM=7 ./build -o yggstack-freebsd-armv7 + echo "::endgroup::" + # + echo "::group::yggstack-freebsd-i386" GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-i386 + echo "::endgroup::" + # + echo "::group::yggstack-openbsd-arm64" GOOS=openbsd GOARCH=arm64 ./build -o yggstack-openbsd-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-openbsd-amd64" GOOS=openbsd GOARCH=amd64 ./build -o yggstack-openbsd-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-openbsd-armv6" GOOS=openbsd GOARCH=arm GOARM=6 ./build -o yggstack-openbsd-armv6 + echo "::endgroup::" + # + echo "::group::yggstack-openbsd-armv7" GOOS=openbsd GOARCH=arm GOARM=7 ./build -o yggstack-openbsd-armv7 + echo "::endgroup::" + # + echo "::group::yggstack-openbsd-i386" GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-i386 + echo "::endgroup::" + # + echo "::group::yggstack-netbsd-arm64" GOOS=netbsd GOARCH=arm64 ./build -o yggstack-netbsd-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-netbsd-amd64" GOOS=netbsd GOARCH=amd64 ./build -o yggstack-netbsd-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-netbsd-armv6" GOOS=netbsd GOARCH=arm GOARM=6 ./build -o yggstack-netbsd-armv6 + echo "::endgroup::" + # + echo "::group::yggstack-netbsd-armv7" GOOS=netbsd GOARCH=arm GOARM=7 ./build -o yggstack-netbsd-armv7 + echo "::endgroup::" + # + echo "::group::yggstack-netbsd-i386" GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-i386 - CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" GOOS=android GOARCH=arm64 ./build -o yggstack-android-arm64 - CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang" GOOS=android GOARCH=amd64 ./build -o yggstack-android-amd64 - CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang" GOOS=android GOARCH=arm GOARM=7 ./build -o yggstack-android-armv7 - CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang" GOOS=android GOARCH=386 ./build -o yggstack-android-i386 + echo "::endgroup::" + # + echo "::group::yggstack-android-arm64" + CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" GOOS=android GOARCH=arm64 ./build -o yggstack-android-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-android-amd64" + CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang" GOOS=android GOARCH=amd64 ./build -o yggstack-android-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-android-armv7" + CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang" GOOS=android GOARCH=arm GOARM=7 ./build -o yggstack-android-armv7 + echo "::endgroup::" + # + echo "::group::yggstack-android-i386" + CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang" GOOS=android GOARCH=386 ./build -o yggstack-android-i386 + echo "::endgroup::" + # + #echo "::group::yggstack-ios-arm64" #GOOS=ios GOARCH=arm64 CC=$(go env GOROOT)/misc/ios/clangwrap.sh ./build -o yggstack-ios-arm64 + #echo "::endgroup::" + # + #echo "::group::yggstack-ios-amd64" #GOOS=ios GOARCH=amd64 CC=$(go env GOROOT)/misc/ios/clangwrap.sh ./build -o yggstack-ios-amd64 + #echo "::endgroup::" - name: Publish release run: | From f0eecd21d46675bc68b5f1fc8f45260258d3ff3f Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Wed, 24 Jul 2024 18:16:56 +0300 Subject: [PATCH 18/39] Bump yggdrasil-go and gvisor Signed-off-by: Vasyl Gello --- go.mod | 33 +++++++++++++++++++-------------- go.sum | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 67f1113..ee38bad 100644 --- a/go.mod +++ b/go.mod @@ -1,14 +1,16 @@ module github.com/yggdrasil-network/yggstack -go 1.21.4 +go 1.22.0 + +toolchain go1.22.5 require ( github.com/gologme/log v1.3.0 github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 - github.com/things-go/go-socks5 v0.0.4 - github.com/yggdrasil-network/yggdrasil-go v0.5.6 - gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00 + github.com/things-go/go-socks5 v0.0.5 + github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 + gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07 ) require ( @@ -17,17 +19,20 @@ require ( github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/bits-and-blooms/bloom/v3 v3.7.0 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 // indirect - github.com/onsi/ginkgo/v2 v2.13.2 // indirect - github.com/quic-go/quic-go v0.44.0 // indirect + github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 // indirect + github.com/onsi/ginkgo/v2 v2.19.0 // indirect + github.com/quic-go/quic-go v0.45.1 // indirect go.uber.org/mock v0.4.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect - golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/crypto v0.25.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/net v0.27.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.0 // indirect + golang.org/x/tools v0.23.0 // indirect + nhooyr.io/websocket v1.8.11 // indirect ) diff --git a/go.sum b/go.sum index a94ee98..aaad669 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,11 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/gologme/log v1.3.0 h1:l781G4dE+pbigClDSDzSaaYKtiueHCILUa/qSDsmHAo= @@ -24,28 +27,39 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 h1:dHLYa5D8/Ta0aLR2XcPsrkpAgGeFs6thhMcQK0oQ0n8= github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3uCWyfMgOamLGWuGqlMS77Y1m3Y= +github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hjson/hjson-go/v4 v4.4.0 h1:D/NPvqOCH6/eisTb5/ztuIS8GUvmpHaLOcNk1Bjr298= github.com/hjson/hjson-go/v4 v4.4.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= +github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= +github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= +github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjCA= +github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/things-go/go-socks5 v0.0.4 h1:jMQjIc+qhD4z9cITOMnBiwo9dDmpGuXmBlkRFrl/qD0= github.com/things-go/go-socks5 v0.0.4/go.mod h1:sh4K6WHrmHZpjxLTCHyYtXYH8OUuD+yZun41NomR1IQ= +github.com/things-go/go-socks5 v0.0.5 h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPYufe8= +github.com/things-go/go-socks5 v0.0.5/go.mod h1:mtzInf8v5xmsBpHZVbIw2YQYhc4K0jRwzfsH64Uh0IQ= github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yggdrasil-network/yggdrasil-go v0.5.6 h1:thh5YQYXQgkhkSO6v2D9Ya9fLHXfY38VfsCTZTIbIeI= github.com/yggdrasil-network/yggdrasil-go v0.5.6/go.mod h1:WAqMZ4e1QSf/EKbzfD77XXTSAIRO/0nWKCVpHsKLg40= +github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 h1:Dcmf3t104V7eHZF3e9vrmjH4cd+d/7d3iVCEZQpgnww= +github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= @@ -54,12 +68,18 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -68,6 +88,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -83,6 +105,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -97,6 +121,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -105,12 +131,21 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00 h1:CaYh1ABhmDNrDvY7Xs8y4/TqK67I4r3Jb1du+J4PG60= gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00/go.mod h1:10sU+Uh5KKNv1+2x2A0Gvzt8FjD3ASIhorV3YsauXhk= +gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07 h1:b9kYPM3wIr57fP57xqjMbVLRgfu167jc40BipkdB8c0= +gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= +gvisor.dev/gvisor v0.0.0-20240723231517-1986723ac675 h1:1uPgUerCubrBBfoMQBrBgvmbBInwdDqLc/y5vSGPpdA= +gvisor.dev/gvisor v0.0.0-20240723231517-1986723ac675/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= +nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= +nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= From 9da884697a47b6ca00f4dd12e11162f9ae5ade8d Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Wed, 24 Jul 2024 18:23:43 +0300 Subject: [PATCH 19/39] Fix gvisor changes Signed-off-by: Vasyl Gello --- src/netstack/yggdrasil.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/netstack/yggdrasil.go b/src/netstack/yggdrasil.go index 5c68d8c..efb8811 100644 --- a/src/netstack/yggdrasil.go +++ b/src/netstack/yggdrasil.go @@ -97,12 +97,16 @@ func (e *YggdrasilNIC) IsAttached() bool { return e.dispatcher != nil } func (e *YggdrasilNIC) MTU() uint32 { return uint32(e.ipv6rwc.MTU()) } +func (e *YggdrasilNIC) SetMTU(uint32) {} + func (*YggdrasilNIC) Capabilities() stack.LinkEndpointCapabilities { return stack.CapabilityNone } func (*YggdrasilNIC) MaxHeaderLength() uint16 { return 40 } func (*YggdrasilNIC) LinkAddress() tcpip.LinkAddress { return "" } +func (*YggdrasilNIC) SetLinkAddress(tcpip.LinkAddress) {} + func (*YggdrasilNIC) Wait() {} func (e *YggdrasilNIC) writePacket( @@ -168,8 +172,9 @@ func (e *YggdrasilNIC) ParseHeader(*stack.PacketBuffer) bool { return true } -func (e *YggdrasilNIC) Close() error { +func (e *YggdrasilNIC) Close() { e.stack.stack.RemoveNIC(1) e.dispatcher = nil - return nil } + +func (e *YggdrasilNIC) SetOnCloseAction(func()) {} From 1eb9a94d2cd9016be921d38e57bfb88f6472ad76 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Thu, 25 Jul 2024 06:49:06 +0300 Subject: [PATCH 20/39] Try to use netgo,osusergo,static for static builds Signed-off-by: Vasyl Gello --- build | 1 + 1 file changed, 1 insertion(+) diff --git a/build b/build index 4a63f46..fc9e183 100755 --- a/build +++ b/build @@ -21,6 +21,7 @@ do r) ARGS="$ARGS -race";; o) ARGS="$ARGS -o $OPTARG";; p) ARGS="$ARGS -buildmode=pie";; + s) ARGS="$ARGS -tags netgo,osusersgo,static" LDFLAGS="$LDFLAGS -extldflags '-static'";; esac done From b534d1205efdbdf82e5da1fc8349899b1dded373 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Thu, 25 Jul 2024 07:12:59 +0300 Subject: [PATCH 21/39] Try building static linux binaries without external linking --- .github/workflows/trunk.yml | 65 ++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index 32a1d19..90c33e8 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -28,20 +28,6 @@ jobs: with: go-version: "1.21" - - name: Download and install cross-tools - run: | - sudo apt-get update - sudo apt-get install \ - crossbuild-essential-armhf \ - crossbuild-essential-arm64 \ - crossbuild-essential-i386 \ - crossbuild-essential-mips \ - crossbuild-essential-mipsel \ - crossbuild-essential-mips64 \ - crossbuild-essential-mips64el \ - crossbuild-essential-riscv64 \ - crossbuild-essential-s390x - - name: Build yggstack executables run: | echo "::group::yggstack-windows-armv7.exe" @@ -113,47 +99,68 @@ jobs: echo "::endgroup::" # echo "::group::yggstack-linux-i386-static" - CGO_ENABLED=1 CC="/usr/bin/i686-linux-gnu-gcc" GOOS=linux GOARCH=386 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-i386-static + CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-i386-static + ldd yggstack-linux-i386-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-amd64-static" - CGO_ENABLED=1 GOOS=linux GOARCH=amd64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-amd64-static + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./build -s -o yggstack-linux-amd64-static + ldd yggstack-linux-amd64-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-armv6-static" - CGO_ENABLED=1 CC="/usr/bin/arm-linux-gnueabihf-gcc" GOOS=linux GOARCH=arm GOARM=6 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv6-static + CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 ./build -s -o yggstack-linux-armv6-static + ldd yggstack-linux-armv6-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-armv7-static" - CGO_ENABLED=1 CC="/usr/bin/arm-linux-gnueabihf-gcc" GOOS=linux GOARCH=arm GOARM=7 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-armv7-static + CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 ./build -s -o yggstack-linux-armv7-static + ldd yggstack-linux-armv7-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-arm64-static" - CGO_ENABLED=1 CC="/usr/bin/aarch64-linux-gnu-gcc" GOOS=linux GOARCH=arm64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-arm64-static + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 ./build -s -o yggstack-linux-arm64-static + ldd yggstack-linux-arm64-static || echo "OK" echo "::endgroup::" # - #echo "::group::yggstack-linux-mips-sf-static" - #CGO_ENABLED=1 CC="/usr/bin/mips-linux-gnu-gcc" GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips-sf-static - #echo "::endgroup::" + echo "::group::yggstack-linux-mips-sf-static" + CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -s -o yggstack-linux-mips-sf-static + ldd yggstack-linux-mips-sf-static || echo "OK" + echo "::endgroup::" # - #echo "::group::yggstack-linux-mipsle-sf-static" - #CGO_ENABLED=1 CC="/usr/bin/mipsel-linux-gnu-gcc" GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mipsle-sf-static - #echo "::endgroup::" + echo "::group::yggstack-linux-mipsle-sf-static" + CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -s -o yggstack-linux-mipsle-sf-static + ldd yggstack-linux-mipsle-sf-static || echo "OK" + echo "::endgroup::" # echo "::group::yggstack-linux-mips64-static" - CGO_ENABLED=1 CC="/usr/bin/mips64-linux-gnuabi64-gcc" GOOS=linux GOARCH=mips64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64-static + CGO_ENABLED=0 GOOS=linux GOARCH=mips64 ./build -s -o yggstack-linux-mips64-static + ldd yggstack-linux-mips64-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-mips64le-static" - CGO_ENABLED=1 CC="/usr/bin/mips64el-linux-gnuabi64-gcc" GOOS=linux GOARCH=mips64le ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-mips64le-static + CGO_ENABLED=0 GOOS=linux GOARCH=mips64le ./build -s -o yggstack-linux-mips64le-static + ldd yggstack-linux-mips64le-static || echo "OK" + echo "::endgroup::" + # + echo "::group::yggstack-linux-ppc64" + CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 ./build -s -o yggstack-linux-ppc64 + ldd yggstack-linux-ppc64-static || echo "OK" + echo "::endgroup::" + # + echo "::group::yggstack-linux-ppc64le" + CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le ./build -s -o yggstack-linux-ppc64le + ldd yggstack-linux-ppc64le-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-riscv64-static" - CGO_ENABLED=1 CC="/usr/bin/riscv64-linux-gnu-gcc" GOOS=linux GOARCH=riscv64 ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-riscv64-static + CGO_ENABLED=0 GOOS=linux GOARCH=riscv64 ./build -s -o yggstack-linux-riscv64-static + ldd yggstack-linux-riscv64-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-linux-s390x-static" - CGO_ENABLED=1 CC="/usr/bin/s390x-linux-gnu-gcc" GOOS=linux GOARCH=s390x ./build -l "-linkmode 'external' -extldflags '-static' -s" -o yggstack-linux-s390x-static + CGO_ENABLED=0 GOOS=linux GOARCH=s390x ./build -s -o yggstack-linux-s390x-static + ldd yggstack-linux-s390x-static || echo "OK" echo "::endgroup::" # echo "::group::yggstack-darwin-arm64" From 3be03c793f874a8fda4377bd78a334e5204e2104 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Thu, 25 Jul 2024 10:17:05 +0300 Subject: [PATCH 22/39] Try publishing static binaries as distroless containers Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 33 +++++++++++++++++++++++++++------ Dockerfile.static | 9 +++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 Dockerfile.static diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index 90c33e8..feafd4e 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -10,6 +10,7 @@ concurrency: permissions: contents: write + packages: write jobs: build: @@ -19,12 +20,12 @@ jobs: name: Build Windows/Linux/MacOS/FreeBSD/Android runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: go-version: "1.21" @@ -100,6 +101,7 @@ jobs: # echo "::group::yggstack-linux-i386-static" CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-i386-static + CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-386-static ldd yggstack-linux-i386-static || echo "OK" echo "::endgroup::" # @@ -143,13 +145,13 @@ jobs: ldd yggstack-linux-mips64le-static || echo "OK" echo "::endgroup::" # - echo "::group::yggstack-linux-ppc64" - CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 ./build -s -o yggstack-linux-ppc64 + echo "::group::yggstack-linux-ppc64-static" + CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 ./build -s -o yggstack-linux-ppc64-static ldd yggstack-linux-ppc64-static || echo "OK" echo "::endgroup::" # - echo "::group::yggstack-linux-ppc64le" - CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le ./build -s -o yggstack-linux-ppc64le + echo "::group::yggstack-linux-ppc64le-static" + CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le ./build -s -o yggstack-linux-ppc64le-static ldd yggstack-linux-ppc64le-static || echo "OK" echo "::endgroup::" # @@ -260,3 +262,22 @@ jobs: gh release create trunk --prerelease yggstack-* || gh release upload trunk yggstack-* --clobber env: GH_TOKEN: ${{ github.token }} + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push yggstack container image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile.static + platforms: linux/386, linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/ppc64le, linux/riscv64, linux/s390x + push: true + tags: ghcr.io/yggdrasil-network/yggstack:trunk diff --git a/Dockerfile.static b/Dockerfile.static new file mode 100644 index 0000000..14c4aa5 --- /dev/null +++ b/Dockerfile.static @@ -0,0 +1,9 @@ +FROM --platform=linux/amd64 gcr.io/distroless/static + +ARG TARGETOS +ARG TARGETARCH +ARG TARGETVARIANT + +COPY --chown=0:0 --chmod=0755 yggstack-${TARGETOS}-${TARGETARCH}${TARGETVARIANT}-static /bin/yggstack + +ENTRYPOINT [ "/bin/yggstack" ] From 95a41a3e8fe9a298914de2bc857d2b301a422049 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Thu, 25 Jul 2024 19:49:07 +0300 Subject: [PATCH 23/39] Use golang:1.21-buster for glibc stuff From Matrix Yggdrasil developer room: The only problem is on Ubuntu 20.04: yggstack-linux-amd64: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./yggstack-linux-amd64) yggstack-linux-amd64: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./yggstack-linux-amd64) We do not need latest Ubuntu as we dont use external linking in static binaries. Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 178 +++++++++++++++++++++++------------- 1 file changed, 116 insertions(+), 62 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index feafd4e..6afb7c9 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -8,27 +8,18 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true -permissions: - contents: write - packages: write - jobs: build: strategy: fail-fast: false - name: Build Windows/Linux/MacOS/FreeBSD/Android + name: Build Windows/Linux-static/MacOS/FreeBSD/Android runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Set up Go - uses: actions/setup-go@v5 - with: - go-version: "1.21" - - name: Build yggstack executables run: | echo "::group::yggstack-windows-armv7.exe" @@ -41,64 +32,13 @@ jobs: # echo "::group::yggstack-windows-i386.exe" GOOS=windows GOARCH=386 ./build -o yggstack-windows-i386.exe + GOOS=windows GOARCH=386 ./build -o yggstack-windows-386.exe echo "::endgroup::" # echo "::group::yggstack-windows-amd64.exe" GOOS=windows GOARCH=amd64 ./build -o yggstack-windows-amd64.exe echo "::endgroup::" # - echo "::group::yggstack-linux-i386" - GOOS=linux GOARCH=386 ./build -o yggstack-linux-i386 - echo "::endgroup::" - # - echo "::group::yggstack-linux-amd64" - GOOS=linux GOARCH=amd64 ./build -o yggstack-linux-amd64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-armv6" - GOOS=linux GOARCH=arm GOARM=6 ./build -o yggstack-linux-armv6 - echo "::endgroup::" - # - echo "::group::yggstack-linux-armv7" - GOOS=linux GOARCH=arm GOARM=7 ./build -o yggstack-linux-armv7 - echo "::endgroup::" - # - echo "::group::yggstack-linux-arm64" - GOOS=linux GOARCH=arm64 ./build -o yggstack-linux-arm64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-mips-sf" - GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -o yggstack-linux-mips-sf - echo "::endgroup::" - # - echo "::group::yggstack-linux-mipsle-sf" - GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -o yggstack-linux-mipsle-sf - echo "::endgroup::" - # - echo "::group::yggstack-linux-mips64" - GOOS=linux GOARCH=mips64 ./build -o yggstack-linux-mips64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-mips64le" - GOOS=linux GOARCH=mips64le ./build -o yggstack-linux-mips64le - echo "::endgroup::" - # - echo "::group::yggstack-linux-ppc64" - GOOS=linux GOARCH=ppc64 ./build -o yggstack-linux-ppc64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-ppc64le" - GOOS=linux GOARCH=ppc64le ./build -o yggstack-linux-ppc64le - echo "::endgroup::" - # - echo "::group::yggstack-linux-riscv64" - GOOS=linux GOARCH=riscv64 ./build -o yggstack-linux-riscv64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-s390x" - GOOS=linux GOARCH=s390x ./build -o yggstack-linux-s390x - echo "::endgroup::" - # echo "::group::yggstack-linux-i386-static" CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-i386-static CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-386-static @@ -191,6 +131,7 @@ jobs: # echo "::group::yggstack-freebsd-i386" GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-i386 + GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-386 echo "::endgroup::" # echo "::group::yggstack-openbsd-arm64" @@ -211,6 +152,7 @@ jobs: # echo "::group::yggstack-openbsd-i386" GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-i386 + GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-386 echo "::endgroup::" # echo "::group::yggstack-netbsd-arm64" @@ -231,6 +173,7 @@ jobs: # echo "::group::yggstack-netbsd-i386" GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-i386 + GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-386 echo "::endgroup::" # echo "::group::yggstack-android-arm64" @@ -247,6 +190,7 @@ jobs: # echo "::group::yggstack-android-i386" CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang" GOOS=android GOARCH=386 ./build -o yggstack-android-i386 + CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android21-clang" GOOS=android GOARCH=386 ./build -o yggstack-android-386 echo "::endgroup::" # #echo "::group::yggstack-ios-arm64" @@ -257,6 +201,116 @@ jobs: #GOOS=ios GOARCH=amd64 CC=$(go env GOROOT)/misc/ios/clangwrap.sh ./build -o yggstack-ios-amd64 #echo "::endgroup::" + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: yggstack-allnoglibc + path: yggstack-* + + build-linux-glibc: + strategy: + fail-fast: false + + name: Build Linux-glibc + runs-on: ubuntu-latest + container: + image: jumpserver/golang:1.22-buster + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Build yggstack executables + run: | + git config --global --add safe.directory /__w/yggstack/yggstack + echo "::group::yggstack-linux-i386" + GOOS=linux GOARCH=386 ./build -o yggstack-linux-i386 + GOOS=linux GOARCH=386 ./build -o yggstack-linux-386 + echo "::endgroup::" + # + echo "::group::yggstack-linux-amd64" + GOOS=linux GOARCH=amd64 ./build -o yggstack-linux-amd64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-armv6" + GOOS=linux GOARCH=arm GOARM=6 ./build -o yggstack-linux-armv6 + echo "::endgroup::" + # + echo "::group::yggstack-linux-armv7" + GOOS=linux GOARCH=arm GOARM=7 ./build -o yggstack-linux-armv7 + echo "::endgroup::" + # + echo "::group::yggstack-linux-arm64" + GOOS=linux GOARCH=arm64 ./build -o yggstack-linux-arm64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips-sf" + GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -o yggstack-linux-mips-sf + echo "::endgroup::" + # + echo "::group::yggstack-linux-mipsle-sf" + GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -o yggstack-linux-mipsle-sf + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips64" + GOOS=linux GOARCH=mips64 ./build -o yggstack-linux-mips64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-mips64le" + GOOS=linux GOARCH=mips64le ./build -o yggstack-linux-mips64le + echo "::endgroup::" + # + echo "::group::yggstack-linux-ppc64" + GOOS=linux GOARCH=ppc64 ./build -o yggstack-linux-ppc64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-ppc64le" + GOOS=linux GOARCH=ppc64le ./build -o yggstack-linux-ppc64le + echo "::endgroup::" + # + echo "::group::yggstack-linux-riscv64" + GOOS=linux GOARCH=riscv64 ./build -o yggstack-linux-riscv64 + echo "::endgroup::" + # + echo "::group::yggstack-linux-s390x" + GOOS=linux GOARCH=s390x ./build -o yggstack-linux-s390x + echo "::endgroup::" + # + + - name: Upload artifacts + uses: actions/upload-artifact@master + with: + name: yggstack-linuxglibc + path: yggstack-* + + publish: + strategy: + fail-fast: false + + needs: + - build + - build-linux-glibc + + permissions: + contents: write + packages: write + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Download artifacts (all excluding glibc) + uses: actions/download-artifact@master + with: + name: yggstack-allnoglibc + + - name: Download artifacts (linux glibc) + uses: actions/download-artifact@master + with: + name: yggstack-linuxglibc + - name: Publish release run: | gh release create trunk --prerelease yggstack-* || gh release upload trunk yggstack-* --clobber From fef083ae4a749896fa9e1085d3cde16b050f4b35 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Fri, 26 Jul 2024 10:36:12 +0300 Subject: [PATCH 24/39] Declare *bsd builds are static and drop CGO_ENABLED for ststic build Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 138 ++++++++++++++++++------------------ build | 4 +- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index 6afb7c9..c2bec23 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -40,150 +40,150 @@ jobs: echo "::endgroup::" # echo "::group::yggstack-linux-i386-static" - CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-i386-static - CGO_ENABLED=0 GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-386-static - ldd yggstack-linux-i386-static || echo "OK" + GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-i386-static + GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-386-static + ! ldd yggstack-linux-i386-static echo "::endgroup::" # echo "::group::yggstack-linux-amd64-static" - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./build -s -o yggstack-linux-amd64-static - ldd yggstack-linux-amd64-static || echo "OK" + GOOS=linux GOARCH=amd64 ./build -s -o yggstack-linux-amd64-static + ! ldd yggstack-linux-amd64-static echo "::endgroup::" # echo "::group::yggstack-linux-armv6-static" - CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 ./build -s -o yggstack-linux-armv6-static - ldd yggstack-linux-armv6-static || echo "OK" + GOOS=linux GOARCH=arm GOARM=6 ./build -s -o yggstack-linux-armv6-static + ! ldd yggstack-linux-armv6-static echo "::endgroup::" # echo "::group::yggstack-linux-armv7-static" - CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 ./build -s -o yggstack-linux-armv7-static - ldd yggstack-linux-armv7-static || echo "OK" + GOOS=linux GOARCH=arm GOARM=7 ./build -s -o yggstack-linux-armv7-static + ! ldd yggstack-linux-armv7-static echo "::endgroup::" # echo "::group::yggstack-linux-arm64-static" - CGO_ENABLED=0 GOOS=linux GOARCH=arm64 ./build -s -o yggstack-linux-arm64-static - ldd yggstack-linux-arm64-static || echo "OK" + GOOS=linux GOARCH=arm64 ./build -s -o yggstack-linux-arm64-static + ! ldd yggstack-linux-arm64-static echo "::endgroup::" # echo "::group::yggstack-linux-mips-sf-static" - CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -s -o yggstack-linux-mips-sf-static - ldd yggstack-linux-mips-sf-static || echo "OK" + GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -s -o yggstack-linux-mips-sf-static + ! ldd yggstack-linux-mips-sf-static echo "::endgroup::" # echo "::group::yggstack-linux-mipsle-sf-static" - CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -s -o yggstack-linux-mipsle-sf-static - ldd yggstack-linux-mipsle-sf-static || echo "OK" + GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -s -o yggstack-linux-mipsle-sf-static + ! ldd yggstack-linux-mipsle-sf-static echo "::endgroup::" # echo "::group::yggstack-linux-mips64-static" - CGO_ENABLED=0 GOOS=linux GOARCH=mips64 ./build -s -o yggstack-linux-mips64-static - ldd yggstack-linux-mips64-static || echo "OK" + GOOS=linux GOARCH=mips64 ./build -s -o yggstack-linux-mips64-static + ! ldd yggstack-linux-mips64-static echo "::endgroup::" # echo "::group::yggstack-linux-mips64le-static" - CGO_ENABLED=0 GOOS=linux GOARCH=mips64le ./build -s -o yggstack-linux-mips64le-static - ldd yggstack-linux-mips64le-static || echo "OK" + GOOS=linux GOARCH=mips64le ./build -s -o yggstack-linux-mips64le-static + ! ldd yggstack-linux-mips64le-static echo "::endgroup::" # echo "::group::yggstack-linux-ppc64-static" - CGO_ENABLED=0 GOOS=linux GOARCH=ppc64 ./build -s -o yggstack-linux-ppc64-static - ldd yggstack-linux-ppc64-static || echo "OK" + GOOS=linux GOARCH=ppc64 ./build -s -o yggstack-linux-ppc64-static + ! ldd yggstack-linux-ppc64-static echo "::endgroup::" # echo "::group::yggstack-linux-ppc64le-static" - CGO_ENABLED=0 GOOS=linux GOARCH=ppc64le ./build -s -o yggstack-linux-ppc64le-static - ldd yggstack-linux-ppc64le-static || echo "OK" + GOOS=linux GOARCH=ppc64le ./build -s -o yggstack-linux-ppc64le-static + ! ldd yggstack-linux-ppc64le-static echo "::endgroup::" # echo "::group::yggstack-linux-riscv64-static" - CGO_ENABLED=0 GOOS=linux GOARCH=riscv64 ./build -s -o yggstack-linux-riscv64-static - ldd yggstack-linux-riscv64-static || echo "OK" + GOOS=linux GOARCH=riscv64 ./build -s -o yggstack-linux-riscv64-static + ! ldd yggstack-linux-riscv64-static echo "::endgroup::" # echo "::group::yggstack-linux-s390x-static" - CGO_ENABLED=0 GOOS=linux GOARCH=s390x ./build -s -o yggstack-linux-s390x-static - ldd yggstack-linux-s390x-static || echo "OK" - echo "::endgroup::" - # - echo "::group::yggstack-darwin-arm64" - GOOS=darwin GOARCH=arm64 ./build -o yggstack-darwin-arm64 + GOOS=linux GOARCH=s390x ./build -s -o yggstack-linux-s390x-static + ! ldd yggstack-linux-s390x-static echo "::endgroup::" # echo "::group::yggstack-darwin-amd64" GOOS=darwin GOARCH=amd64 ./build -o yggstack-darwin-amd64 echo "::endgroup::" # - echo "::group::yggstack-freebsd-arm64" - GOOS=freebsd GOARCH=arm64 ./build -o yggstack-freebsd-arm64 + echo "::group::yggstack-darwin-arm64" + GOOS=darwin GOARCH=arm64 ./build -o yggstack-darwin-arm64 echo "::endgroup::" # - echo "::group::yggstack-freebsd-amd64" - GOOS=freebsd GOARCH=amd64 ./build -o yggstack-freebsd-amd64 + echo "::group::yggstack-freebsd-amd64-static" + GOOS=freebsd GOARCH=amd64 ./build -o yggstack-freebsd-amd64-static echo "::endgroup::" # - echo "::group::yggstack-freebsd-armv6" - GOOS=freebsd GOARCH=arm GOARM=6 ./build -o yggstack-freebsd-armv6 + echo "::group::yggstack-freebsd-arm64-static" + GOOS=freebsd GOARCH=arm64 ./build -o yggstack-freebsd-arm64-static echo "::endgroup::" # - echo "::group::yggstack-freebsd-armv7" - GOOS=freebsd GOARCH=arm GOARM=7 ./build -o yggstack-freebsd-armv7 + echo "::group::yggstack-freebsd-armv6-static" + GOOS=freebsd GOARCH=arm GOARM=6 ./build -o yggstack-freebsd-armv6-static echo "::endgroup::" # - echo "::group::yggstack-freebsd-i386" - GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-i386 - GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-386 + echo "::group::yggstack-freebsd-armv7-static" + GOOS=freebsd GOARCH=arm GOARM=7 ./build -o yggstack-freebsd-armv7-static echo "::endgroup::" # - echo "::group::yggstack-openbsd-arm64" - GOOS=openbsd GOARCH=arm64 ./build -o yggstack-openbsd-arm64 + echo "::group::yggstack-freebsd-i386-static" + GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-i386-static + GOOS=freebsd GOARCH=386 ./build -o yggstack-freebsd-386-static echo "::endgroup::" # - echo "::group::yggstack-openbsd-amd64" - GOOS=openbsd GOARCH=amd64 ./build -o yggstack-openbsd-amd64 + echo "::group::yggstack-openbsd-amd64-static" + GOOS=openbsd GOARCH=amd64 ./build -o yggstack-openbsd-amd64-static echo "::endgroup::" # - echo "::group::yggstack-openbsd-armv6" - GOOS=openbsd GOARCH=arm GOARM=6 ./build -o yggstack-openbsd-armv6 + echo "::group::yggstack-openbsd-arm64-static" + GOOS=openbsd GOARCH=arm64 ./build -o yggstack-openbsd-arm64-static echo "::endgroup::" # - echo "::group::yggstack-openbsd-armv7" - GOOS=openbsd GOARCH=arm GOARM=7 ./build -o yggstack-openbsd-armv7 + echo "::group::yggstack-openbsd-armv6-static" + GOOS=openbsd GOARCH=arm GOARM=6 ./build -o yggstack-openbsd-armv6-static echo "::endgroup::" # - echo "::group::yggstack-openbsd-i386" - GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-i386 - GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-386 + echo "::group::yggstack-openbsd-armv7-static" + GOOS=openbsd GOARCH=arm GOARM=7 ./build -o yggstack-openbsd-armv7-static + echo "::endgroup::" + # + echo "::group::yggstack-openbsd-i386-static" + GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-i386-static + GOOS=openbsd GOARCH=386 ./build -o yggstack-openbsd-386-static + echo "::endgroup::" + # + echo "::group::yggstack-netbsd-amd64-static" + GOOS=netbsd GOARCH=amd64 ./build -o yggstack-netbsd-amd64-static echo "::endgroup::" # echo "::group::yggstack-netbsd-arm64" - GOOS=netbsd GOARCH=arm64 ./build -o yggstack-netbsd-arm64 + GOOS=netbsd GOARCH=arm64 ./build -o yggstack-netbsd-arm64-static echo "::endgroup::" # - echo "::group::yggstack-netbsd-amd64" - GOOS=netbsd GOARCH=amd64 ./build -o yggstack-netbsd-amd64 + echo "::group::yggstack-netbsd-armv6-static" + GOOS=netbsd GOARCH=arm GOARM=6 ./build -o yggstack-netbsd-armv6-static echo "::endgroup::" # - echo "::group::yggstack-netbsd-armv6" - GOOS=netbsd GOARCH=arm GOARM=6 ./build -o yggstack-netbsd-armv6 + echo "::group::yggstack-netbsd-armv7-static" + GOOS=netbsd GOARCH=arm GOARM=7 ./build -o yggstack-netbsd-armv7-static echo "::endgroup::" # - echo "::group::yggstack-netbsd-armv7" - GOOS=netbsd GOARCH=arm GOARM=7 ./build -o yggstack-netbsd-armv7 - echo "::endgroup::" - # - echo "::group::yggstack-netbsd-i386" - GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-i386 - GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-386 - echo "::endgroup::" - # - echo "::group::yggstack-android-arm64" - CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" GOOS=android GOARCH=arm64 ./build -o yggstack-android-arm64 + echo "::group::yggstack-netbsd-i386-static" + GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-i386-static + GOOS=netbsd GOARCH=386 ./build -o yggstack-netbsd-386-static echo "::endgroup::" # echo "::group::yggstack-android-amd64" CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang" GOOS=android GOARCH=amd64 ./build -o yggstack-android-amd64 echo "::endgroup::" # + echo "::group::yggstack-android-arm64" + CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang" GOOS=android GOARCH=arm64 ./build -o yggstack-android-arm64 + echo "::endgroup::" + # echo "::group::yggstack-android-armv7" CGO_ENABLED=1 CC="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang" GOOS=android GOARCH=arm GOARM=7 ./build -o yggstack-android-armv7 echo "::endgroup::" diff --git a/build b/build index fc9e183..f14d867 100755 --- a/build +++ b/build @@ -9,7 +9,7 @@ PKGVER=${PKGVER:-$(sh contrib/semver/version.sh --bare)} LDFLAGS="-X $PKGSRC.buildName=$PKGNAME -X $PKGSRC.buildVersion=$PKGVER" ARGS="-v" -while getopts "utc:l:dro:p" option +while getopts "utc:l:dro:ps" option do case "$option" in @@ -21,7 +21,7 @@ do r) ARGS="$ARGS -race";; o) ARGS="$ARGS -o $OPTARG";; p) ARGS="$ARGS -buildmode=pie";; - s) ARGS="$ARGS -tags netgo,osusersgo,static" LDFLAGS="$LDFLAGS -extldflags '-static'";; + s) ARGS="$ARGS -tags netgo,osusersgo,static" LDFLAGS="$LDFLAGS -extldflags '-static'" CGO_ENABLED=0;; esac done From 5a87e43f9a7a0efdb20c9bc9a2e342c335a8767b Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Fri, 26 Jul 2024 11:54:55 +0300 Subject: [PATCH 25/39] Try building only static executables for Linux/*BSD It appears Go toolchain silently uses netgo+osusergo+static if cross-compiling but provides dynamicaly-linked executable for native arch. Keeping track of all Linux and *BSD sysroots is impractical so lets ship static executables where possible. They may bot honor system DNS resolver but at least they work everywhere. Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 172 ++++++++---------------------------- 1 file changed, 35 insertions(+), 137 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index c2bec23..da5ce26 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -8,12 +8,16 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: write + packages: write + jobs: build: strategy: fail-fast: false - name: Build Windows/Linux-static/MacOS/FreeBSD/Android + name: Build Windows/Linux-static/MacOS/*BSD-static/Android runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -22,86 +26,90 @@ jobs: - name: Build yggstack executables run: | - echo "::group::yggstack-windows-armv7.exe" - GOOS=windows GOARCH=arm GOARM=7 ./build -o yggstack-windows-armv7.exe + set -e + echo "::group::yggstack-windows-amd64.exe" + GOOS=windows GOARCH=amd64 ./build -o yggstack-windows-amd64.exe echo "::endgroup::" # echo "::group::yggstack-windows-arm64.exe" GOOS=windows GOARCH=arm64 ./build -o yggstack-windows-arm64.exe echo "::endgroup::" # + echo "::group::yggstack-windows-armv7.exe" + GOOS=windows GOARCH=arm GOARM=7 ./build -o yggstack-windows-armv7.exe + echo "::endgroup::" + # echo "::group::yggstack-windows-i386.exe" GOOS=windows GOARCH=386 ./build -o yggstack-windows-i386.exe GOOS=windows GOARCH=386 ./build -o yggstack-windows-386.exe echo "::endgroup::" # - echo "::group::yggstack-windows-amd64.exe" - GOOS=windows GOARCH=amd64 ./build -o yggstack-windows-amd64.exe - echo "::endgroup::" - # - echo "::group::yggstack-linux-i386-static" - GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-i386-static - GOOS=linux GOARCH=386 ./build -s -o yggstack-linux-386-static - ! ldd yggstack-linux-i386-static - echo "::endgroup::" - # + # NOTE: Go toolchain does produce dynamically linked binaries + # for native-architecture Linux/*BSD. Since we are building on amd64, + # request this buid to be fully static like the othe builds echo "::group::yggstack-linux-amd64-static" GOOS=linux GOARCH=amd64 ./build -s -o yggstack-linux-amd64-static ! ldd yggstack-linux-amd64-static echo "::endgroup::" # + echo "::group::yggstack-linux-arm64-static" + GOOS=linux GOARCH=arm64 ./build -o yggstack-linux-arm64-static + ! ldd yggstack-linux-arm64-static + echo "::endgroup::" + # echo "::group::yggstack-linux-armv6-static" - GOOS=linux GOARCH=arm GOARM=6 ./build -s -o yggstack-linux-armv6-static + GOOS=linux GOARCH=arm GOARM=6 ./build -o yggstack-linux-armv6-static ! ldd yggstack-linux-armv6-static echo "::endgroup::" # echo "::group::yggstack-linux-armv7-static" - GOOS=linux GOARCH=arm GOARM=7 ./build -s -o yggstack-linux-armv7-static + GOOS=linux GOARCH=arm GOARM=7 ./build -o yggstack-linux-armv7-static ! ldd yggstack-linux-armv7-static echo "::endgroup::" # - echo "::group::yggstack-linux-arm64-static" - GOOS=linux GOARCH=arm64 ./build -s -o yggstack-linux-arm64-static - ! ldd yggstack-linux-arm64-static + echo "::group::yggstack-linux-i386-static" + GOOS=linux GOARCH=386 ./build -o yggstack-linux-i386-static + GOOS=linux GOARCH=386 ./build -o yggstack-linux-386-static + ! ldd yggstack-linux-i386-static echo "::endgroup::" # echo "::group::yggstack-linux-mips-sf-static" - GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -s -o yggstack-linux-mips-sf-static + GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -o yggstack-linux-mips-sf-static ! ldd yggstack-linux-mips-sf-static echo "::endgroup::" # echo "::group::yggstack-linux-mipsle-sf-static" - GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -s -o yggstack-linux-mipsle-sf-static + GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -o yggstack-linux-mipsle-sf-static ! ldd yggstack-linux-mipsle-sf-static echo "::endgroup::" # echo "::group::yggstack-linux-mips64-static" - GOOS=linux GOARCH=mips64 ./build -s -o yggstack-linux-mips64-static + GOOS=linux GOARCH=mips64 ./build -o yggstack-linux-mips64-static ! ldd yggstack-linux-mips64-static echo "::endgroup::" # echo "::group::yggstack-linux-mips64le-static" - GOOS=linux GOARCH=mips64le ./build -s -o yggstack-linux-mips64le-static + GOOS=linux GOARCH=mips64le ./build -o yggstack-linux-mips64le-static ! ldd yggstack-linux-mips64le-static echo "::endgroup::" # echo "::group::yggstack-linux-ppc64-static" - GOOS=linux GOARCH=ppc64 ./build -s -o yggstack-linux-ppc64-static + GOOS=linux GOARCH=ppc64 ./build -o yggstack-linux-ppc64-static ! ldd yggstack-linux-ppc64-static echo "::endgroup::" # echo "::group::yggstack-linux-ppc64le-static" - GOOS=linux GOARCH=ppc64le ./build -s -o yggstack-linux-ppc64le-static + GOOS=linux GOARCH=ppc64le ./build -o yggstack-linux-ppc64le-static ! ldd yggstack-linux-ppc64le-static echo "::endgroup::" # echo "::group::yggstack-linux-riscv64-static" - GOOS=linux GOARCH=riscv64 ./build -s -o yggstack-linux-riscv64-static + GOOS=linux GOARCH=riscv64 ./build -o yggstack-linux-riscv64-static ! ldd yggstack-linux-riscv64-static echo "::endgroup::" # echo "::group::yggstack-linux-s390x-static" - GOOS=linux GOARCH=s390x ./build -s -o yggstack-linux-s390x-static + GOOS=linux GOARCH=s390x ./build -o yggstack-linux-s390x-static ! ldd yggstack-linux-s390x-static echo "::endgroup::" # @@ -159,7 +167,7 @@ jobs: GOOS=netbsd GOARCH=amd64 ./build -o yggstack-netbsd-amd64-static echo "::endgroup::" # - echo "::group::yggstack-netbsd-arm64" + echo "::group::yggstack-netbsd-arm64-static" GOOS=netbsd GOARCH=arm64 ./build -o yggstack-netbsd-arm64-static echo "::endgroup::" # @@ -201,116 +209,6 @@ jobs: #GOOS=ios GOARCH=amd64 CC=$(go env GOROOT)/misc/ios/clangwrap.sh ./build -o yggstack-ios-amd64 #echo "::endgroup::" - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: yggstack-allnoglibc - path: yggstack-* - - build-linux-glibc: - strategy: - fail-fast: false - - name: Build Linux-glibc - runs-on: ubuntu-latest - container: - image: jumpserver/golang:1.22-buster - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Build yggstack executables - run: | - git config --global --add safe.directory /__w/yggstack/yggstack - echo "::group::yggstack-linux-i386" - GOOS=linux GOARCH=386 ./build -o yggstack-linux-i386 - GOOS=linux GOARCH=386 ./build -o yggstack-linux-386 - echo "::endgroup::" - # - echo "::group::yggstack-linux-amd64" - GOOS=linux GOARCH=amd64 ./build -o yggstack-linux-amd64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-armv6" - GOOS=linux GOARCH=arm GOARM=6 ./build -o yggstack-linux-armv6 - echo "::endgroup::" - # - echo "::group::yggstack-linux-armv7" - GOOS=linux GOARCH=arm GOARM=7 ./build -o yggstack-linux-armv7 - echo "::endgroup::" - # - echo "::group::yggstack-linux-arm64" - GOOS=linux GOARCH=arm64 ./build -o yggstack-linux-arm64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-mips-sf" - GOOS=linux GOARCH=mips GOMIPS=softfloat ./build -o yggstack-linux-mips-sf - echo "::endgroup::" - # - echo "::group::yggstack-linux-mipsle-sf" - GOOS=linux GOARCH=mipsle GOMIPS=softfloat ./build -o yggstack-linux-mipsle-sf - echo "::endgroup::" - # - echo "::group::yggstack-linux-mips64" - GOOS=linux GOARCH=mips64 ./build -o yggstack-linux-mips64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-mips64le" - GOOS=linux GOARCH=mips64le ./build -o yggstack-linux-mips64le - echo "::endgroup::" - # - echo "::group::yggstack-linux-ppc64" - GOOS=linux GOARCH=ppc64 ./build -o yggstack-linux-ppc64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-ppc64le" - GOOS=linux GOARCH=ppc64le ./build -o yggstack-linux-ppc64le - echo "::endgroup::" - # - echo "::group::yggstack-linux-riscv64" - GOOS=linux GOARCH=riscv64 ./build -o yggstack-linux-riscv64 - echo "::endgroup::" - # - echo "::group::yggstack-linux-s390x" - GOOS=linux GOARCH=s390x ./build -o yggstack-linux-s390x - echo "::endgroup::" - # - - - name: Upload artifacts - uses: actions/upload-artifact@master - with: - name: yggstack-linuxglibc - path: yggstack-* - - publish: - strategy: - fail-fast: false - - needs: - - build - - build-linux-glibc - - permissions: - contents: write - packages: write - - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Download artifacts (all excluding glibc) - uses: actions/download-artifact@master - with: - name: yggstack-allnoglibc - - - name: Download artifacts (linux glibc) - uses: actions/download-artifact@master - with: - name: yggstack-linuxglibc - - name: Publish release run: | gh release create trunk --prerelease yggstack-* || gh release upload trunk yggstack-* --clobber From 9395ddbfa29b1322f56111e7ad8aea38133d047f Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 5 Aug 2024 21:52:10 +0300 Subject: [PATCH 26/39] Expand trunk builds for tags Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index da5ce26..e52acd6 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -1,8 +1,13 @@ -name: Trunk build +name: Trunk / release build on: push: branch: develop + tags: + - 'v[0-9]+.[0-9]+.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+' + - 'v[0-9]+.[0-9]+.[0-9]+-[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+-[0-9]+' concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -24,6 +29,19 @@ jobs: with: fetch-depth: 0 + - name: Check if commit needs a release upload + run: | + if [ "${{ github.ref_type }}" = "tag" ]; then + echo "PRERELEASE=''" >> "$GITHUB_ENV" + echo "RELEASE_NAME='${{ github.ref_name }}'" >> "$GITHUB_ENV" + elif "${{ github.ref }}" = "refs/heads/develop" ]; then + echo "PRERELEASE=--prerelease" >> "$GITHUB_ENV" + echo "RELEASENAME=trunk" >> "$GITHUB_ENV" + else + echo "Not a tag or develop branch, skipping upload" + echo "SKIP_UPLOAD=1" >> "$GITHUB_ENV" + fi + - name: Build yggstack executables run: | set -e @@ -210,15 +228,18 @@ jobs: #echo "::endgroup::" - name: Publish release + if: ${{ env.SKIP_UPLOAD != '1' }} run: | - gh release create trunk --prerelease yggstack-* || gh release upload trunk yggstack-* --clobber + gh release create "${{ env.RELEASENAME }}" "${{ env.PRERELEASE }}" yggstack-* || gh release upload "${{ env.RELEASENAME }}" yggstack-* --clobber env: GH_TOKEN: ${{ github.token }} - name: Set up Docker Buildx + if: ${{ env.SKIP_UPLOAD != '1' }} uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry + if: ${{ env.SKIP_UPLOAD != '1' }} uses: docker/login-action@v3 with: registry: ghcr.io @@ -226,10 +247,11 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push yggstack container image + if: ${{ env.SKIP_UPLOAD != '1' }} uses: docker/build-push-action@v6 with: context: . file: Dockerfile.static platforms: linux/386, linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64, linux/ppc64le, linux/riscv64, linux/s390x push: true - tags: ghcr.io/yggdrasil-network/yggstack:trunk + tags: ghcr.io/yggdrasil-network/yggstack:${{ env.RELEASENAME }} From 4844607750c726c9b399da76e22b4ffba91dceea Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 5 Aug 2024 22:13:02 +0300 Subject: [PATCH 27/39] Bump dependencies * ygdrasil-go 0.5.7 Signed-off-by: Vasyl Gello --- go.mod | 18 +++++++++--------- go.sum | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index ee38bad..0c02bc3 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,8 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.5 - github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 - gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07 + github.com/yggdrasil-network/yggdrasil-go v0.5.7 + gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0 ) require ( @@ -21,18 +21,18 @@ require ( github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 // indirect - github.com/onsi/ginkgo/v2 v2.19.0 // indirect - github.com/quic-go/quic-go v0.45.1 // indirect + github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect + github.com/onsi/ginkgo/v2 v2.19.1 // indirect + github.com/quic-go/quic-go v0.45.2 // indirect go.uber.org/mock v0.4.0 // indirect golang.org/x/crypto v0.25.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/mod v0.19.0 // indirect + golang.org/x/mod v0.20.0 // indirect golang.org/x/net v0.27.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.22.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.23.0 // indirect golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.5.0 // indirect + golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.23.0 // indirect nhooyr.io/websocket v1.8.11 // indirect ) diff --git a/go.sum b/go.sum index aaad669..dd6863e 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= @@ -29,6 +30,8 @@ github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 h1:dHLYa5D8/Ta0aLR2Xc github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3uCWyfMgOamLGWuGqlMS77Y1m3Y= github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hjson/hjson-go/v4 v4.4.0 h1:D/NPvqOCH6/eisTb5/ztuIS8GUvmpHaLOcNk1Bjr298= @@ -37,15 +40,20 @@ github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0= +github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA= github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjCA= github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= +github.com/quic-go/quic-go v0.45.2 h1:DfqBmqjb4ExSdxRIb/+qXhPC+7k6+DUNZha4oeiC9fY= +github.com/quic-go/quic-go v0.45.2/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= @@ -60,6 +68,8 @@ github.com/yggdrasil-network/yggdrasil-go v0.5.6 h1:thh5YQYXQgkhkSO6v2D9Ya9fLHXf github.com/yggdrasil-network/yggdrasil-go v0.5.6/go.mod h1:WAqMZ4e1QSf/EKbzfD77XXTSAIRO/0nWKCVpHsKLg40= github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 h1:Dcmf3t104V7eHZF3e9vrmjH4cd+d/7d3iVCEZQpgnww= github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= +github.com/yggdrasil-network/yggdrasil-go v0.5.7 h1:dYGchGR4qKfVCrCta4DMINo//UxjvfV0JeLX+3zj570= +github.com/yggdrasil-network/yggdrasil-go v0.5.7/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= @@ -80,6 +90,8 @@ golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -95,6 +107,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -107,6 +121,8 @@ golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -125,6 +141,8 @@ golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -137,6 +155,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -147,5 +166,9 @@ gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07 h1:b9kYPM3wIr57fP57xqjMbVLR gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= gvisor.dev/gvisor v0.0.0-20240723231517-1986723ac675 h1:1uPgUerCubrBBfoMQBrBgvmbBInwdDqLc/y5vSGPpdA= gvisor.dev/gvisor v0.0.0-20240723231517-1986723ac675/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= +gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0 h1:UybFse48qgYhNsLM6+veYik671wDb8TzfnQVhWQUtwQ= +gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= +gvisor.dev/gvisor v0.0.0-20240805185406-34f8c3f24ec6 h1:GFOhayno6H4dSqrO5Stlb0mBIIG2koxBRz+IXdos3n8= +gvisor.dev/gvisor v0.0.0-20240805185406-34f8c3f24ec6/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= From b132d6af16bc076c6296aeec182da857ee0310ee Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 5 Aug 2024 22:15:59 +0300 Subject: [PATCH 28/39] Make CI run on branch or tag push Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index e52acd6..a84ab3d 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -2,7 +2,8 @@ name: Trunk / release build on: push: - branch: develop + branches: + - develop tags: - 'v[0-9]+.[0-9]+.[0-9]+' - '[0-9]+.[0-9]+.[0-9]+' From 98b1a1c79df67d1d2ede1e98e5b1ac2f8de72886 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 5 Aug 2024 22:19:11 +0300 Subject: [PATCH 29/39] Add caching Go setup step Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index a84ab3d..97f35b5 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -30,6 +30,10 @@ jobs: with: fetch-depth: 0 + - uses: actions/setup-go@v5 + with: + go-version: '1.22' + - name: Check if commit needs a release upload run: | if [ "${{ github.ref_type }}" = "tag" ]; then From 873b19b7c696a51b7b9d2824044f86fa1532abe3 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Mon, 5 Aug 2024 22:30:47 +0300 Subject: [PATCH 30/39] Fix release upload Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index 97f35b5..b52ae5c 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -37,9 +37,8 @@ jobs: - name: Check if commit needs a release upload run: | if [ "${{ github.ref_type }}" = "tag" ]; then - echo "PRERELEASE=''" >> "$GITHUB_ENV" - echo "RELEASE_NAME='${{ github.ref_name }}'" >> "$GITHUB_ENV" - elif "${{ github.ref }}" = "refs/heads/develop" ]; then + echo "RELEASENAME=${{ github.ref_name }}" >> "$GITHUB_ENV" + elif [ "${{ github.ref }}" = "refs/heads/develop" ]; then echo "PRERELEASE=--prerelease" >> "$GITHUB_ENV" echo "RELEASENAME=trunk" >> "$GITHUB_ENV" else @@ -233,9 +232,9 @@ jobs: #echo "::endgroup::" - name: Publish release - if: ${{ env.SKIP_UPLOAD != '1' }} + if: ${{ env.SKIP_UPLOAD == '' }} run: | - gh release create "${{ env.RELEASENAME }}" "${{ env.PRERELEASE }}" yggstack-* || gh release upload "${{ env.RELEASENAME }}" yggstack-* --clobber + gh release create "${{ env.RELEASENAME }}" ${{ env.PRERELEASE }} yggstack-* || gh release upload "${{ env.RELEASENAME }}" yggstack-* --clobber env: GH_TOKEN: ${{ github.token }} @@ -244,7 +243,7 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry - if: ${{ env.SKIP_UPLOAD != '1' }} + if: ${{ env.SKIP_UPLOAD == '' }} uses: docker/login-action@v3 with: registry: ghcr.io @@ -252,7 +251,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push yggstack container image - if: ${{ env.SKIP_UPLOAD != '1' }} + if: ${{ env.SKIP_UPLOAD == '' }} uses: docker/build-push-action@v6 with: context: . From 7a72fe25ab869a584b976c66647eebf36c0a7dce Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Tue, 6 Aug 2024 06:34:16 +0300 Subject: [PATCH 31/39] Edit README.md * Go needed version is 1.22 now thx to gvisor * Add external DNS nameserver usage example [skip CI] skip CI Signed-off-by: Vasyl Gello --- README.md | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 02cbbbf..a2a425e 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Tagged releases provide packages similar to Yggdrasil. If you want to build from source, as opposed to installing one of the pre-built packages: -1. Install [Go](https://golang.org) (requires Go 1.17 or later) +1. Install [Go](https://golang.org) (requires Go 1.22 or later) 2. Clone this repository 2. Run `./build` @@ -132,14 +132,37 @@ Unlike mainline Yggdrasil, Yggstack does NOT require privileged access. You can even run several Yggstack instances with different configurations on the same OS and user! +### External DNS nameservers + +If a client tool like `curl` fails to resolve `.ygg` domain, and yggstack prints +the following warning on start-up: + +``` +2024/08/06 03:27:20 DNS nameserver is not set! +2024/08/06 03:27:20 SOCKS server will not be able to resolve hostnames other than .pk.ygg ! +``` + +start yggstack pointing to a [DNS server](https://yggdrasil-network.github.io/services.html#dns), +for example: + +``` +yggstack -useconffile ygg-client.conf -nameserver '[324:71e:281a:9ed3::53]:53' -socks 127.0.0.1:9060 +``` + +and test if resolver works: + +``` +curl -x socks5h://127.0.0.1:9060 http://web.mc.ygg +``` + ### pk.ygg DNS resolver One unique feature of Yggstack is built-in DNS resolver functionality using -`.pk.ygg` format. +`.pk.ygg` format without the need for external DNS nameservers. For example, HowToYgg website (whose public key is `d40d4a7153cf288ea28f1865f6cfe95143a478b5c8c9e7cb002a0633d10a53eb`) can be accessed by any Web browser supporting SOCKS servers -via `http://d40d4a7153cf288ea28f1865f6cfe95143a478b5c8c9e7cb002a0633d10a53eb.pk.ygg` +via `http://d40d4a7153cf288ea28f1865f6cfe95143a478b5c8c9e7cb002a0633d10a53eb.pk.ygg` You can even use cURL with Yggstack: From 08f51fded2b5ff6866d755e1db51b2182bbc4e94 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Tue, 6 Aug 2024 06:44:44 +0300 Subject: [PATCH 32/39] Canonicalize DNS example in readme Signed-off-by: Vasyl Gello --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a2a425e..368b662 100644 --- a/README.md +++ b/README.md @@ -146,13 +146,13 @@ start yggstack pointing to a [DNS server](https://yggdrasil-network.github.io/se for example: ``` -yggstack -useconffile ygg-client.conf -nameserver '[324:71e:281a:9ed3::53]:53' -socks 127.0.0.1:9060 +yggstack -useconffile /path/to/yggdrasil.conf -nameserver '[324:71e:281a:9ed3::53]:53' -socks 127.0.0.1:1080 ``` and test if resolver works: ``` -curl -x socks5h://127.0.0.1:9060 http://web.mc.ygg +curl -x socks5h://127.0.0.1:1080 http://web.mc.ygg ``` ### pk.ygg DNS resolver From bfc106637a543737b994c3289d607d2d42584cc2 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Tue, 6 Aug 2024 15:35:26 +0300 Subject: [PATCH 33/39] Fix UDP port forward not working with Yggdrasil client Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index 19fbad9..efad372 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -465,13 +465,16 @@ func main() { for { bytesRead, remoteUdpAddr, err := udpListenConn.ReadFrom(udpBuffer) if err != nil { - if bytesRead == 0 { - continue - } + logger.Debugf("udp readFrom error: %v", err) + } + if bytesRead == 0 { + continue } remoteUdpAddrStr := remoteUdpAddr.String() + var udpSession *UDPSession = nil + connVal, ok := remoteUdpConnections.Load(remoteUdpAddrStr) if !ok { @@ -481,17 +484,18 @@ func main() { logger.Errorf("Failed to connect to %s: %s", mapping.Mapped, err) continue } - udpSession := &UDPSession{ + udpSession = &UDPSession{ conn: udpFwdConn, remoteAddr: remoteUdpAddr, } remoteUdpConnections.Store(remoteUdpAddrStr, udpSession) go types.ReverseProxyUDP(mtu, udpListenConn, remoteUdpAddr, udpFwdConn) - } + } else { + udpSession, ok = connVal.(*UDPSession) - udpSession, ok := connVal.(*UDPSession) - if !ok { - continue + if !ok { + continue + } } udpFwdConnPtr := udpSession.conn.(*net.UDPConn) From 58b3efd2da0bfd88ca59553abd55bff8d9fdf732 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Tue, 6 Aug 2024 16:07:36 +0300 Subject: [PATCH 34/39] Trigger CI builds on pull requests ... but upload only tags or pyshes to develop branch Signed-off-by: Vasyl Gello --- .github/workflows/trunk.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/trunk.yml b/.github/workflows/trunk.yml index b52ae5c..32385e7 100644 --- a/.github/workflows/trunk.yml +++ b/.github/workflows/trunk.yml @@ -1,6 +1,9 @@ name: Trunk / release build on: + pull_request: + paths-ignore: + - "README.md" push: branches: - develop @@ -38,11 +41,11 @@ jobs: run: | if [ "${{ github.ref_type }}" = "tag" ]; then echo "RELEASENAME=${{ github.ref_name }}" >> "$GITHUB_ENV" - elif [ "${{ github.ref }}" = "refs/heads/develop" ]; then + elif [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/develop" ]; then echo "PRERELEASE=--prerelease" >> "$GITHUB_ENV" echo "RELEASENAME=trunk" >> "$GITHUB_ENV" else - echo "Not a tag or develop branch, skipping upload" + echo "Not a tag or push to develop branch, skipping upload" echo "SKIP_UPLOAD=1" >> "$GITHUB_ENV" fi From c65f79d01ab16bb27427c9ba2a053696b2b3b708 Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Tue, 13 Aug 2024 12:06:46 +0300 Subject: [PATCH 35/39] Bump yggdrasil-go and gvisor Signed-off-by: Vasyl Gello --- go.mod | 4 ++-- go.sum | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 0c02bc3..04b5ca3 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,8 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.5 - github.com/yggdrasil-network/yggdrasil-go v0.5.7 - gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0 + github.com/yggdrasil-network/yggdrasil-go v0.5.8 + gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f ) require ( diff --git a/go.sum b/go.sum index dd6863e..92be544 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,8 @@ github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 h github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= github.com/yggdrasil-network/yggdrasil-go v0.5.7 h1:dYGchGR4qKfVCrCta4DMINo//UxjvfV0JeLX+3zj570= github.com/yggdrasil-network/yggdrasil-go v0.5.7/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= +github.com/yggdrasil-network/yggdrasil-go v0.5.8 h1:8vpSVcsu4+zFtDl80j38tSu1ExZEEBrGS2CBVf5tB1Y= +github.com/yggdrasil-network/yggdrasil-go v0.5.8/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= @@ -170,5 +172,7 @@ gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0 h1:UybFse48qgYhNsLM6+veYik6 gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= gvisor.dev/gvisor v0.0.0-20240805185406-34f8c3f24ec6 h1:GFOhayno6H4dSqrO5Stlb0mBIIG2koxBRz+IXdos3n8= gvisor.dev/gvisor v0.0.0-20240805185406-34f8c3f24ec6/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= +gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f h1:llng6MGz63x02Xs1Ft71riYTfau4zS8OAZKv5jgPX6M= +gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= From 763e4db047d089fe857d0aae47aff6aef9bede1b Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sat, 19 Oct 2024 22:01:56 +0300 Subject: [PATCH 36/39] Bump yggdrasil to 0.5.9 Signed-off-by: Vasyl Gello --- go.mod | 36 +++++++++++++++++++----------------- go.sum | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 04b5ca3..ba26790 100644 --- a/go.mod +++ b/go.mod @@ -9,30 +9,32 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.5 - github.com/yggdrasil-network/yggdrasil-go v0.5.8 + github.com/yggdrasil-network/yggdrasil-go v0.5.9 gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f ) require ( - github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2 // indirect + github.com/Arceliar/ironwood v0.0.0-20241016082300-f6fb9da97a17 // indirect github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d // indirect - github.com/bits-and-blooms/bitset v1.13.0 // indirect + github.com/bits-and-blooms/bitset v1.14.3 // indirect github.com/bits-and-blooms/bloom/v3 v3.7.0 // indirect + github.com/coder/websocket v1.8.12 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect - github.com/onsi/ginkgo/v2 v2.19.1 // indirect - github.com/quic-go/quic-go v0.45.2 // indirect - go.uber.org/mock v0.4.0 // indirect - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/mod v0.20.0 // indirect - golang.org/x/net v0.27.0 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/pprof v0.0.0-20241017200806-017d972448fc // indirect + github.com/onsi/ginkgo/v2 v2.20.2 // indirect + github.com/quic-go/quic-go v0.48.0 // indirect + github.com/wlynxg/anet v0.0.5 // indirect + go.uber.org/mock v0.5.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/net v0.30.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.23.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.6.0 // indirect - golang.org/x/tools v0.23.0 // indirect - nhooyr.io/websocket v1.8.11 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + golang.org/x/time v0.7.0 // indirect + golang.org/x/tools v0.26.0 // indirect + nhooyr.io/websocket v1.8.17 // indirect ) diff --git a/go.sum b/go.sum index 92be544..7c06fd2 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,18 @@ github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2 h1:SBdYBKeXYUUFef5wi2CMhYmXFVGiYaRpTvbki0Bu+JQ= github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2/go.mod h1:6WP4799FX0OuWdENGQAh+0RXp9FLh0y7NZ7tM9cJyXk= +github.com/Arceliar/ironwood v0.0.0-20241016082300-f6fb9da97a17 h1:uOvHqPwu09ndYZQDUL6QvyDcz0M9kwooKYa/PEfLwIU= +github.com/Arceliar/ironwood v0.0.0-20241016082300-f6fb9da97a17/go.mod h1:6WP4799FX0OuWdENGQAh+0RXp9FLh0y7NZ7tM9cJyXk= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.14.3 h1:Gd2c8lSNf9pKXom5JtD7AaKO8o7fGQ2LtFj1436qilA= +github.com/bits-and-blooms/bitset v1.14.3/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bloom/v3 v3.7.0 h1:VfknkqV4xI+PsaDIsoHueyxVDZrfvMn56jeWUzvzdls= github.com/bits-and-blooms/bloom/v3 v3.7.0/go.mod h1:VKlUSvp0lFIYqxJjzdnSsZEw4iHb1kOL2tfHTgyJBHg= +github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= +github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -24,6 +30,8 @@ github.com/gologme/log v1.3.0 h1:l781G4dE+pbigClDSDzSaaYKtiueHCILUa/qSDsmHAo= github.com/gologme/log v1.3.0/go.mod h1:yKT+DvIPdDdDoPtqFrFxheooyVmoqi0BAsw+erN3wA4= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 h1:dHLYa5D8/Ta0aLR2XcPsrkpAgGeFs6thhMcQK0oQ0n8= @@ -32,6 +40,8 @@ github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3u github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/pprof v0.0.0-20241017200806-017d972448fc h1:NGyrhhFhwvRAZg02jnYVg3GBQy0qGBKmFQJwaPmpmxs= +github.com/google/pprof v0.0.0-20241017200806-017d972448fc/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hjson/hjson-go/v4 v4.4.0 h1:D/NPvqOCH6/eisTb5/ztuIS8GUvmpHaLOcNk1Bjr298= @@ -42,6 +52,8 @@ github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0= github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA= +github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= +github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= @@ -54,6 +66,8 @@ github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjC github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/quic-go/quic-go v0.45.2 h1:DfqBmqjb4ExSdxRIb/+qXhPC+7k6+DUNZha4oeiC9fY= github.com/quic-go/quic-go v0.45.2/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= +github.com/quic-go/quic-go v0.48.0 h1:2TCyvBrMu1Z25rvIAlnp2dPT4lgh/uTqLqiXVpp5AeU= +github.com/quic-go/quic-go v0.48.0/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= @@ -64,6 +78,8 @@ github.com/things-go/go-socks5 v0.0.5 h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPY github.com/things-go/go-socks5 v0.0.5/go.mod h1:mtzInf8v5xmsBpHZVbIw2YQYhc4K0jRwzfsH64Uh0IQ= github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/yggdrasil-network/yggdrasil-go v0.5.6 h1:thh5YQYXQgkhkSO6v2D9Ya9fLHXfY38VfsCTZTIbIeI= github.com/yggdrasil-network/yggdrasil-go v0.5.6/go.mod h1:WAqMZ4e1QSf/EKbzfD77XXTSAIRO/0nWKCVpHsKLg40= github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 h1:Dcmf3t104V7eHZF3e9vrmjH4cd+d/7d3iVCEZQpgnww= @@ -72,9 +88,13 @@ github.com/yggdrasil-network/yggdrasil-go v0.5.7 h1:dYGchGR4qKfVCrCta4DMINo//Uxj github.com/yggdrasil-network/yggdrasil-go v0.5.7/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= github.com/yggdrasil-network/yggdrasil-go v0.5.8 h1:8vpSVcsu4+zFtDl80j38tSu1ExZEEBrGS2CBVf5tB1Y= github.com/yggdrasil-network/yggdrasil-go v0.5.8/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= +github.com/yggdrasil-network/yggdrasil-go v0.5.9 h1:cJ55wE49z8AhxF9LAMO0B0Ee8V4W5Rj3CboSuexOKp8= +github.com/yggdrasil-network/yggdrasil-go v0.5.9/go.mod h1:3LIVeZPpT6XcCepbeHfsrR1KmsGGEPSV+XjqhYQWOmI= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= +go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= @@ -82,10 +102,14 @@ golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= +golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= @@ -94,6 +118,8 @@ golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -104,6 +130,8 @@ golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -125,6 +153,8 @@ golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -141,10 +171,14 @@ golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -153,6 +187,8 @@ golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= +golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -176,3 +212,5 @@ gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f h1:llng6MGz63x02Xs1Ft71riYT gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= +nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y= +nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= From 696625c14f1cc2e43faaaae78c16ab1c2d118abb Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sun, 24 Nov 2024 14:33:28 +0000 Subject: [PATCH 37/39] Update to Yggdrasil 0.5.10 --- go.mod | 16 +++-- go.sum | 183 +++++++-------------------------------------------------- 2 files changed, 27 insertions(+), 172 deletions(-) diff --git a/go.mod b/go.mod index ba26790..61d24f1 100644 --- a/go.mod +++ b/go.mod @@ -9,17 +9,16 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.5 - github.com/yggdrasil-network/yggdrasil-go v0.5.9 + github.com/yggdrasil-network/yggdrasil-go v0.5.10 gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f ) require ( - github.com/Arceliar/ironwood v0.0.0-20241016082300-f6fb9da97a17 // indirect + github.com/Arceliar/ironwood v0.0.0-20241122002527-75a6e82fa380 // indirect github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d // indirect github.com/bits-and-blooms/bitset v1.14.3 // indirect github.com/bits-and-blooms/bloom/v3 v3.7.0 // indirect github.com/coder/websocket v1.8.12 // indirect - github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/pprof v0.0.0-20241017200806-017d972448fc // indirect @@ -27,14 +26,13 @@ require ( github.com/quic-go/quic-go v0.48.0 // indirect github.com/wlynxg/anet v0.0.5 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.28.0 // indirect + golang.org/x/crypto v0.29.0 // indirect golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.7.0 // indirect golang.org/x/tools v0.26.0 // indirect - nhooyr.io/websocket v1.8.17 // indirect ) diff --git a/go.sum b/go.sum index 7c06fd2..8aa51a4 100644 --- a/go.sum +++ b/go.sum @@ -1,216 +1,73 @@ -github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2 h1:SBdYBKeXYUUFef5wi2CMhYmXFVGiYaRpTvbki0Bu+JQ= -github.com/Arceliar/ironwood v0.0.0-20240529054413-b8e59574e2b2/go.mod h1:6WP4799FX0OuWdENGQAh+0RXp9FLh0y7NZ7tM9cJyXk= -github.com/Arceliar/ironwood v0.0.0-20241016082300-f6fb9da97a17 h1:uOvHqPwu09ndYZQDUL6QvyDcz0M9kwooKYa/PEfLwIU= -github.com/Arceliar/ironwood v0.0.0-20241016082300-f6fb9da97a17/go.mod h1:6WP4799FX0OuWdENGQAh+0RXp9FLh0y7NZ7tM9cJyXk= +github.com/Arceliar/ironwood v0.0.0-20241122002527-75a6e82fa380 h1:WRLvBMWzs6NOiPUYA7fMu8XqZFg/clXKorUumfbJNv0= +github.com/Arceliar/ironwood v0.0.0-20241122002527-75a6e82fa380/go.mod h1:SrrElc3FFMpYCODSr11jWbLFeOM8WsY+DbDY/l2AXF0= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= -github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bitset v1.14.3 h1:Gd2c8lSNf9pKXom5JtD7AaKO8o7fGQ2LtFj1436qilA= github.com/bits-and-blooms/bitset v1.14.3/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bits-and-blooms/bloom/v3 v3.7.0 h1:VfknkqV4xI+PsaDIsoHueyxVDZrfvMn56jeWUzvzdls= github.com/bits-and-blooms/bloom/v3 v3.7.0/go.mod h1:VKlUSvp0lFIYqxJjzdnSsZEw4iHb1kOL2tfHTgyJBHg= github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/gologme/log v1.3.0 h1:l781G4dE+pbigClDSDzSaaYKtiueHCILUa/qSDsmHAo= github.com/gologme/log v1.3.0/go.mod h1:yKT+DvIPdDdDoPtqFrFxheooyVmoqi0BAsw+erN3wA4= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 h1:dHLYa5D8/Ta0aLR2XcPsrkpAgGeFs6thhMcQK0oQ0n8= -github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3uCWyfMgOamLGWuGqlMS77Y1m3Y= -github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= -github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/pprof v0.0.0-20241017200806-017d972448fc h1:NGyrhhFhwvRAZg02jnYVg3GBQy0qGBKmFQJwaPmpmxs= github.com/google/pprof v0.0.0-20241017200806-017d972448fc/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hjson/hjson-go/v4 v4.4.0 h1:D/NPvqOCH6/eisTb5/ztuIS8GUvmpHaLOcNk1Bjr298= github.com/hjson/hjson-go/v4 v4.4.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= -github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= -github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= -github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= -github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= -github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0= -github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA= github.com/onsi/ginkgo/v2 v2.20.2 h1:7NVCeyIWROIAheY21RLS+3j2bb52W0W82tkberYytp4= github.com/onsi/ginkgo/v2 v2.20.2/go.mod h1:K9gyxPIlb+aIvnZ8bd9Ak+YP18w3APlR+5coaZoE2ag= -github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= -github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/quic-go/quic-go v0.44.0 h1:So5wOr7jyO4vzL2sd8/pD9Kesciv91zSk8BoFngItQ0= -github.com/quic-go/quic-go v0.44.0/go.mod h1:z4cx/9Ny9UtGITIPzmPTXh1ULfOyWh4qGQlpnPcWmek= -github.com/quic-go/quic-go v0.45.1 h1:tPfeYCk+uZHjmDRwHHQmvHRYL2t44ROTujLeFVBmjCA= -github.com/quic-go/quic-go v0.45.1/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= -github.com/quic-go/quic-go v0.45.2 h1:DfqBmqjb4ExSdxRIb/+qXhPC+7k6+DUNZha4oeiC9fY= -github.com/quic-go/quic-go v0.45.2/go.mod h1:1dLehS7TIR64+vxGR70GDcatWTOtMX2PUtnKsjbTurI= github.com/quic-go/quic-go v0.48.0 h1:2TCyvBrMu1Z25rvIAlnp2dPT4lgh/uTqLqiXVpp5AeU= github.com/quic-go/quic-go v0.48.0/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/things-go/go-socks5 v0.0.4 h1:jMQjIc+qhD4z9cITOMnBiwo9dDmpGuXmBlkRFrl/qD0= -github.com/things-go/go-socks5 v0.0.4/go.mod h1:sh4K6WHrmHZpjxLTCHyYtXYH8OUuD+yZun41NomR1IQ= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/things-go/go-socks5 v0.0.5 h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPYufe8= github.com/things-go/go-socks5 v0.0.5/go.mod h1:mtzInf8v5xmsBpHZVbIw2YQYhc4K0jRwzfsH64Uh0IQ= github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/yggdrasil-network/yggdrasil-go v0.5.6 h1:thh5YQYXQgkhkSO6v2D9Ya9fLHXfY38VfsCTZTIbIeI= -github.com/yggdrasil-network/yggdrasil-go v0.5.6/go.mod h1:WAqMZ4e1QSf/EKbzfD77XXTSAIRO/0nWKCVpHsKLg40= -github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157 h1:Dcmf3t104V7eHZF3e9vrmjH4cd+d/7d3iVCEZQpgnww= -github.com/yggdrasil-network/yggdrasil-go v0.5.7-0.20240723215811-5ea16e63a157/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= -github.com/yggdrasil-network/yggdrasil-go v0.5.7 h1:dYGchGR4qKfVCrCta4DMINo//UxjvfV0JeLX+3zj570= -github.com/yggdrasil-network/yggdrasil-go v0.5.7/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= -github.com/yggdrasil-network/yggdrasil-go v0.5.8 h1:8vpSVcsu4+zFtDl80j38tSu1ExZEEBrGS2CBVf5tB1Y= -github.com/yggdrasil-network/yggdrasil-go v0.5.8/go.mod h1:rqiISfR3QgICItCBj2cTeNJo7I6Zpt7dHpsdBRTUBUQ= -github.com/yggdrasil-network/yggdrasil-go v0.5.9 h1:cJ55wE49z8AhxF9LAMO0B0Ee8V4W5Rj3CboSuexOKp8= -github.com/yggdrasil-network/yggdrasil-go v0.5.9/go.mod h1:3LIVeZPpT6XcCepbeHfsrR1KmsGGEPSV+XjqhYQWOmI= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= -go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +github.com/yggdrasil-network/yggdrasil-go v0.5.10 h1:82yIbzxK4NtoiqiJ3s1h35zbS4NCBjbg8YxrclKI39Q= +github.com/yggdrasil-network/yggdrasil-go v0.5.10/go.mod h1:jZPqRYaPEkgpKl8qgcuMYVOX2pNfPi/WPhvsM59bOek= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= -golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= -golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00 h1:CaYh1ABhmDNrDvY7Xs8y4/TqK67I4r3Jb1du+J4PG60= -gvisor.dev/gvisor v0.0.0-20240103195848-a9a6a6819b00/go.mod h1:10sU+Uh5KKNv1+2x2A0Gvzt8FjD3ASIhorV3YsauXhk= -gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07 h1:b9kYPM3wIr57fP57xqjMbVLRgfu167jc40BipkdB8c0= -gvisor.dev/gvisor v0.0.0-20240723215659-4337fc7c3b07/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= -gvisor.dev/gvisor v0.0.0-20240723231517-1986723ac675 h1:1uPgUerCubrBBfoMQBrBgvmbBInwdDqLc/y5vSGPpdA= -gvisor.dev/gvisor v0.0.0-20240723231517-1986723ac675/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= -gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0 h1:UybFse48qgYhNsLM6+veYik671wDb8TzfnQVhWQUtwQ= -gvisor.dev/gvisor v0.0.0-20240805181127-399d7c1526c0/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= -gvisor.dev/gvisor v0.0.0-20240805185406-34f8c3f24ec6 h1:GFOhayno6H4dSqrO5Stlb0mBIIG2koxBRz+IXdos3n8= -gvisor.dev/gvisor v0.0.0-20240805185406-34f8c3f24ec6/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f h1:llng6MGz63x02Xs1Ft71riYTfau4zS8OAZKv5jgPX6M= gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f/go.mod h1:sxc3Uvk/vHcd3tj7/DHVBoR5wvWT/MmRq2pj7HRJnwU= -nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= -nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= -nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y= -nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= From 83bc9a2eecb032e2ef4d138ab7f8254012637329 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 18 Dec 2024 22:39:27 +0000 Subject: [PATCH 38/39] Update to Yggdrasil 0.5.12 --- go.mod | 16 ++++++++-------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 61d24f1..886bba9 100644 --- a/go.mod +++ b/go.mod @@ -9,12 +9,12 @@ require ( github.com/hashicorp/go-syslog v1.0.0 github.com/hjson/hjson-go/v4 v4.4.0 github.com/things-go/go-socks5 v0.0.5 - github.com/yggdrasil-network/yggdrasil-go v0.5.10 + github.com/yggdrasil-network/yggdrasil-go v0.5.12 gvisor.dev/gvisor v0.0.0-20240810013311-326fe0f2a77f ) require ( - github.com/Arceliar/ironwood v0.0.0-20241122002527-75a6e82fa380 // indirect + github.com/Arceliar/ironwood v0.0.0-20241213013129-743fe2fccbd3 // indirect github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d // indirect github.com/bits-and-blooms/bitset v1.14.3 // indirect github.com/bits-and-blooms/bloom/v3 v3.7.0 // indirect @@ -23,16 +23,16 @@ require ( github.com/google/btree v1.1.3 // indirect github.com/google/pprof v0.0.0-20241017200806-017d972448fc // indirect github.com/onsi/ginkgo/v2 v2.20.2 // indirect - github.com/quic-go/quic-go v0.48.0 // indirect + github.com/quic-go/quic-go v0.48.2 // indirect github.com/wlynxg/anet v0.0.5 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/net v0.32.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.7.0 // indirect golang.org/x/tools v0.26.0 // indirect ) diff --git a/go.sum b/go.sum index 8aa51a4..98926b3 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/Arceliar/ironwood v0.0.0-20241122002527-75a6e82fa380 h1:WRLvBMWzs6NOiPUYA7fMu8XqZFg/clXKorUumfbJNv0= -github.com/Arceliar/ironwood v0.0.0-20241122002527-75a6e82fa380/go.mod h1:SrrElc3FFMpYCODSr11jWbLFeOM8WsY+DbDY/l2AXF0= +github.com/Arceliar/ironwood v0.0.0-20241213013129-743fe2fccbd3 h1:d8N0z+udAnbU5PdjpLSNPTWlqeU/nnYsQ42B6+879aw= +github.com/Arceliar/ironwood v0.0.0-20241213013129-743fe2fccbd3/go.mod h1:SrrElc3FFMpYCODSr11jWbLFeOM8WsY+DbDY/l2AXF0= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d h1:UK9fsWbWqwIQkMCz1CP+v5pGbsGoWAw6g4AyvMpm1EM= github.com/Arceliar/phony v0.0.0-20220903101357-530938a4b13d/go.mod h1:BCnxhRf47C/dy/e/D2pmB8NkB3dQVIrkD98b220rx5Q= github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= @@ -33,8 +33,8 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/quic-go/quic-go v0.48.0 h1:2TCyvBrMu1Z25rvIAlnp2dPT4lgh/uTqLqiXVpp5AeU= -github.com/quic-go/quic-go v0.48.0/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= +github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/things-go/go-socks5 v0.0.5 h1:qvKaGcBkfDrUL33SchHN93srAmYGzb4CxSM2DPYufe8= @@ -43,24 +43,24 @@ github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/yggdrasil-network/yggdrasil-go v0.5.10 h1:82yIbzxK4NtoiqiJ3s1h35zbS4NCBjbg8YxrclKI39Q= -github.com/yggdrasil-network/yggdrasil-go v0.5.10/go.mod h1:jZPqRYaPEkgpKl8qgcuMYVOX2pNfPi/WPhvsM59bOek= +github.com/yggdrasil-network/yggdrasil-go v0.5.12 h1:SaQ8d59JP+uFy+nOWXTx1ETM5r2uCfe1Gt/d+IodHJw= +github.com/yggdrasil-network/yggdrasil-go v0.5.12/go.mod h1:u4DU6dpTfWmVs8r0WjW1T3UpGyeUh9vRrS8zngvncwM= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= From 8ad1962f6456a81a6ec5a9b41fd0985f4b5768fe Mon Sep 17 00:00:00 2001 From: Vasyl Gello Date: Sat, 8 Feb 2025 14:13:39 +0200 Subject: [PATCH 39/39] Implement error checking on listeners Signed-off-by: Vasyl Gello --- cmd/yggstack/main.go | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/cmd/yggstack/main.go b/cmd/yggstack/main.go index efad372..64ca65f 100644 --- a/cmd/yggstack/main.go +++ b/cmd/yggstack/main.go @@ -39,7 +39,8 @@ type node struct { core *core.Core multicast *multicast.Multicast admin *admin.AdminSocket - socks5Listener net.Listener + socks5Tcp net.Listener + socks5Unix net.Listener } type UDPSession struct { @@ -306,10 +307,19 @@ func main() { server := socks5.NewServer(socksOptions...) if strings.Contains(*socks, ":") { logger.Infof("Starting SOCKS server on %s", *socks) - go server.ListenAndServe("tcp", *socks) // nolint:errcheck + n.socks5Tcp, err = net.Listen("tcp", *socks) + if err != nil { + panic(err) + } + go func() { + err := server.Serve(n.socks5Tcp) + if err != nil { + panic(err) + } + }() } else { logger.Infof("Starting SOCKS server with socket file %s", *socks) - n.socks5Listener, err = net.Listen("unix", *socks) + n.socks5Unix, err = net.Listen("unix", *socks) if err != nil { // If address in use, try connecting to // the socket to see if other yggstack @@ -330,7 +340,12 @@ func main() { panic(err) } } - go server.Serve(n.socks5Listener) // nolint:errcheck + go func() { + err := server.Serve(n.socks5Unix) + if err != nil { + panic(err) + } + }() } } } @@ -519,10 +534,14 @@ func main() { // Shut down the node. _ = n.admin.Stop() _ = n.multicast.Stop() - if n.socks5Listener != nil { - _ = n.socks5Listener.Close() + if n.socks5Unix != nil { + _ = n.socks5Unix.Close() _ = os.RemoveAll(*socks) - logger.Infof("Stopped UNIX socket listener") + logger.Infof("Stopped SOCKS5 UNIX socket listener") + } + if n.socks5Tcp != nil { + _ = n.socks5Tcp.Close() + logger.Infof("Stopped SOCKS5 TCP listener") } n.core.Stop() }