Commit graph

1457 commits

Author SHA1 Message Date
Shelikhoo
3d7dcfc55d
Add updated docker compose file 2025-04-17 16:41:22 +01:00
meskio
2a5a09e451
CI: use the parent group as namespace for the dependency proxy
This should solve our problem failing to get images on CI runs.
2025-04-16 15:41:36 +02:00
Renovate Bot
d264cf2cdb
chore(deps): update module github.com/miekg/dns to v1.1.65 2025-04-14 15:12:45 +01:00
Renovate Bot
a5ee60e3b5
chore(deps): update module github.com/aws/aws-sdk-go-v2/config to v1.29.13 2025-04-09 15:45:54 +01:00
Renovate Bot
396f7b9941
chore(deps): update module github.com/pion/ice/v4 to v4.0.9 2025-04-03 14:10:40 +01:00
Cecylia Bocovich
9378c53d8e
Bump version of shadow for CI tests 2025-04-02 11:11:01 -04:00
Renovate Bot
61c797406b
chore(deps): update module github.com/prometheus/client_golang to v1.21.1 2025-04-01 20:50:59 +01:00
Cecylia Bocovich
f712dfdd72
Fix shadow and tgen cache in .gitlab-ci.yml
Make sure shadow and tgen runtime dependencies are installed and the
paths are correct
2025-03-27 22:12:35 -04:00
Cecylia Bocovich
08239cca2a
Remove broker log messages for invalid SDP and SQS cleanup 2025-03-27 15:34:09 -04:00
Renovate Bot
5ec92a5dd4
chore(deps): update module github.com/aws/aws-sdk-go-v2/credentials to v1.17.64 2025-03-27 14:36:38 +00:00
Cecylia Bocovich
dd5fb03c49
Remove default relay pattern option from broker
This was only useful to us when we first implemented the feature, to be
able to support proxies that hadn't yet updated, when we had a single
Snowflake bridge. Now that we have multiple bridges, it is unecessary as
proxies that don't send their accepted relay pattern are rejected
anyway.
2025-03-26 13:32:30 -04:00
Cecylia Bocovich
c0ac0186f1
Remove bad relay pattern log message
We already count proxies rejected for their supported relay URL in
snowflake metrics and these messages are filling up our broker logs.
2025-03-26 13:32:30 -04:00
Cecylia Bocovich
8343bbc336
Add context with timeout for client requests
Client timeouts are currently counted from when the client is matched
with a proxy. Instead, count client timeouts from the moment when the
request is received.

Closes #40449
2025-03-26 13:30:59 -04:00
Cecylia Bocovich
db0364ef87
Update DEBIAN_STABLE to bookworm in CI tests 2025-03-20 12:32:40 -04:00
Cecylia Bocovich
116fe9f578
Bump minimum version of go to 1.22
This fixes a pointer bug in our broker sqs code by enabling the loopvar
feature https://go.dev/wiki/LoopvarExperiment

See tpo/anti-censorship/pluggable-transports/snowflake#40363
2025-03-20 12:31:26 -04:00
meskio
fdac01ca90
CI: use Dependency Proxy when available
This sets up CI to allow the use of the GitLab Dependency Proxy which
caches images pulled from DockerHub, in order to bypass rate-limiting.

The DOCKER_REGISTRY_URL variable is set dynamically by the
check_dependency_proxy_access job defined in dependency_proxy.yml such
that only pipelines triggered by users with the requisite access will be
configured to use the proxy, while all others will continue to pull from
DockerHub as before.

When DOCKER_REGISTRY_URL is pre-set in a project's CI/CD variable
settings, the extra job is skipped and the dependency proxy is used
always, unconditionally.

To avoid breaking CI pipelines on 3rd-party GitLab instances, we only
include the dependency proxy template on gitlab.tpo

See: https://gitlab.torproject.org/tpo/tpa/team/-/issues/40335
2025-03-20 17:28:05 +01:00
Cecylia Bocovich
6472bd86cd
Bump verison of Snowflake to 2.11.0 2025-03-18 14:37:02 -04:00
WofWca
f3e040bbd8
improvement: less scary failed conn logs & metrics
...and adjust the `totalFailedConnections` metric name
and description.

This commit should make the periodic stats log messages
and the relevant metric look less scary to users:
P2P connection failures are relatively frequent and are usually
not indicative of the proxy operator having done something wrong.
So let's tone the wording down.

See the discussion: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/516#note_3173677.
2025-03-15 11:15:22 -04:00
Shelikhoo
f715c397c2
Update README to reflect project usecase 2025-03-12 13:58:30 +00:00
WofWca
46fdcce5c6
fix: data race warnings of tokens_t
This migrates from using `atomic.LoadInt64` on `int64`
to making the `clients` field itself `atomic.Int64`.
Also `count` now takes `*tokens_t` by reference,
which fixes a linter warning.

It's not clear to me why it warned about this,
but I simplified it anyway.
2025-03-12 09:53:40 -04:00
WofWca
730e400123 fix: periodicProxyStats.connectionCount race
And `failedConnectionCount`.
Convert the `int` / `uint` to `atomic.Int32` / `atomic.Uint32`.
The race was discovered by running a proxy with the `-race` flag.
2025-03-12 00:47:22 +04:00
WofWca
4205121689 fix: make NATPolicy thread-safe
Although it does not look like that there are situations
where it is critical to use a mutex, because it's only used
when performing rendezvous with a proxy, which doesn't happen
too frequently,
let's still do it just to be sure.
2025-03-12 00:47:22 +04:00
WofWca
1923803124 fix: potential race conditions with non-local err
Some of the changes do not appear to have a potential race condition,
so there it is purely a refactor,
while in others (e.g. in broker.go and in proxy/lib/snowflake.go)
we do use the same variable from multiple threads / functions.
2025-03-12 00:47:07 +04:00
WofWca
01819eee32
fix(proxy): race condition warning for isClosing
It appears that there is no need for the `isClosing` var at all:
we can just `close(c.sendMoreCh)` to ensure that it doesn't block
any more `Write()`s.

This is a follow-up to
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/144.
Related:
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/524.
2025-03-11 15:50:53 -04:00
Renovate Bot
1aa5a61fe8
chore(deps): update module github.com/pion/sdp/v3 to v3.0.11 2025-03-11 13:39:48 -04:00
Cecylia Bocovich
b8410bd748
Merge branch 'renovate/github.com-pion-ice-v4-4.x' 2025-03-11 12:46:12 -04:00
Renovate Bot
3fb30dbb86
chore(deps): update module github.com/pion/webrtc/v4 to v4.0.13 2025-03-11 12:45:32 -04:00
Renovate Bot
da4164473c
chore(deps): update module github.com/pion/webrtc/v4 to v4.0.13 2025-03-11 12:42:28 -04:00
Cecylia Bocovich
57dc276e48
Update broker metrics to count matches, denials, and timeouts
Our metrics were undercounting client polls by missing the case where
clients are matched with a snowflake but receive a timeout before the
snowflake responds with its answer. This change adds a new metric,
called client-snowflake-timeout-count, to the 24 hour broker stats and a
new "timeout" status label for prometheus metrics.
2025-03-11 12:36:27 -04:00
WofWca
583178f4f2
feat(proxy): add failed connection count stats
For the summary log and for Prometheus metrics.

Log output example:

> In the last 1h0m0s, there were 7 completed successful connections. 2 connections failed. Traffic Relayed ↓ 321 KB (0.10 KB/s), ↑ 123 KB (0.05 KB/s).
2025-03-11 13:12:44 +00:00
Renovate Bot
5ef4761968
chore(deps): update module github.com/xtaci/smux to v1.5.34 2025-03-10 15:13:46 +00:00
Cecylia Bocovich
cfde2b79fc
Create CI artifact regardless of when shadow fails
Closes https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40377
2025-03-05 16:14:30 -05:00
Cecylia Bocovich
9e619a3654
Remove metrics race condition in sqs test
To test that the broker responds with a proxy answer if available, have
only one valid client offer to ensure metrics will always be in the
first multiple of 8.
2025-03-04 10:37:37 -05:00
Cecylia Bocovich
80374c6d93
Move nonblocking AddSnowflake out of goroutine in sqs test
This fixes a race condition in tests where sometimes snowflake matching
happens before enough snowflakes get added to the heap.
2025-03-04 10:37:37 -05:00
WofWca
50bed1e67a
refactor: docstring for checkIsRelayURLAcceptable
Related: https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40378.
2025-03-03 12:14:15 +00:00
Cecylia Bocovich
eb13b2ff4b
Copy base client config for each SOCKS connection
Fixes a bug where socksAcceptLoop was reusing the same client config
when processing arguments from multiple SOCKS connections, causing
different bridge lines to clobber each other.
2025-02-25 10:40:51 -05:00
meskio
5f7e23813d
Merge remote-tracking branch 'gitlab/mr/512' 2025-02-24 12:30:30 +01:00
Renovate Bot
0a436a2bc2 chore(deps): update module github.com/prometheus/client_golang to v1.21.0 2025-02-20 14:48:59 +00:00
Cecylia Bocovich
63613cc50a
Fix minor data race in Snowflake broker metrics 2025-02-20 09:39:11 -05:00
Cecylia Bocovich
1180d11a66
Remove data races from sqs tests
Our SQS tests were not concurrency safe and we hadn't noticed until now
because we were processing incoming SQS queue messages sequentially
rather than in parallel.

This fix removes the log output checks, which were prone to error
anyway, and relies instead on gomock's expected function calls and
strategic use of the context cancel function for each test.
2025-02-20 09:39:11 -05:00
Cecylia Bocovich
2250bc86f6
Process and read broker SQS messages more quickly
We're losing a lot of messages from the broker SQS queue because they
are exceeding their maximum lifetime before being read and processed by
the broker. This change speeds up that process by increasing the size of
messagesChn and processing the messages within a go routine.
2025-02-20 09:37:18 -05:00
WofWca
6384643109
fix(proxy): improve NAT test reliability
This is a hack, and I'm not entirely sure how it works,
but it appears to work, at least somewhat.
See https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40419#note_3141855.
2025-02-17 11:47:11 +00:00
meskio
e345c3bac9
proxy: add country to prometheus metrics 2025-02-13 12:44:23 +01:00
meskio
b3c734ed63
proxy: webRTCconn gives the remote IP instead of the Address
We only use the IP part of the address.
2025-02-13 12:44:17 +01:00
WofWca
57eefd4b37
Temove outdated comment
As per https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/502#note_3159902.

The comment was added in c28c8ca489,
and got outdated apparently after
83c01565ef.

Signed-off-by: Cecylia Bocovich <cohosh@torproject.org>
2025-02-12 11:50:29 -05:00
WofWca
cb0fb02cd5
fix(proxy): not answering before client timeout
This is related to
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40230.

The initial MR that closed that issue,
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/391,
was not semantically correct, because `DataChannelTimeout`
starts after the client has already received the answer.

After
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/498#note_3156256
the code became not only semantically incorrect,
but also functionally incorrect because now if this timeout is hit
by the proxy, the client is guaranteed to be gone already.
This commit fixes it, by lowering the timeout.

This addresses a suggestion in
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40447.

This also closes
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40381
and supersedes
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/merge_requests/415.
2025-02-12 10:17:08 -05:00
Renovate Bot
cb30331aa2
chore(deps): update gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/ptutil digest to efaf4e0
Signed-off-by: Cecylia Bocovich <cohosh@torproject.org>
2025-02-12 10:07:00 -05:00
Renovate Bot
5d97990096
chore(deps): update module github.com/aws/aws-sdk-go-v2/config to v1.29.6
Signed-off-by: Cecylia Bocovich <cohosh@torproject.org>
2025-02-12 10:06:02 -05:00
Renovate Bot
d8838d1727
chore(deps): update module github.com/pion/ice/v4 to v4.0.6
Signed-off-by: Cecylia Bocovich <cohosh@torproject.org>
2025-02-12 10:03:22 -05:00
Renovate Bot
971d88ca9d
chore(deps): update module golang.org/x/net to v0.35.0 2025-02-11 11:22:39 +00:00