Repository navigation
cfrs v0.3.0-beta.7
Pre-release
Pre-release
·
972 commits
to main
since this release
The seventh prerelease of cfrs, for tests.
Binaries
| File | System |
|---|---|
cfrs-x86_64-unknown-linux-musl, pod-netns-x86_64-unknown-linux-musl |
Linux x86-64 |
cfrs-aarch64-unknown-linux-musl, pod-netns-aarch64-unknown-linux-musl |
Linux ARM64 |
cfrs-armv7-unknown-linux-musleabihf, pod-netns-armv7-unknown-linux-musleabihf |
Linux ARMv7 (32-bit, hard float) |
cfrs-arm-unknown-linux-musleabihf, pod-netns-arm-unknown-linux-musleabihf |
Linux ARMv6 (32-bit, hard float) |
cfrs-i686-unknown-linux-musl, pod-netns-i686-unknown-linux-musl |
Linux x86 (32-bit) |
cfrs-riscv64gc-unknown-linux-musl, pod-netns-riscv64gc-unknown-linux-musl |
Linux RISC-V 64 |
cfrs-loongarch64-unknown-linux-musl, pod-netns-loongarch64-unknown-linux-musl |
Linux LoongArch64 |
cfrs-powerpc64le-unknown-linux-musl, pod-netns-powerpc64le-unknown-linux-musl |
Linux POWER, little-endian |
Each binary is static (musl). It needs no C library on the host. cfrs.1
is the manual page.
Check a download
sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify cfrs-x86_64-unknown-linux-musl --repo Azathothas/cfrs
cosign verify-blob --bundle SHA256SUMS.sigstore.json \
--certificate-identity https://github.com/Azathothas/cfrs/.github/workflows/release.yml@refs/tags/v0.3.0-beta.7 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com SHA256SUMScfrs update from 0.3.0-beta.6 does these checks itself.
Breaking
Changes that a command written for beta.6 can need:
sharewith no--modetakes the mode of its flags:--filegives
download,--portgives proxy. Flags of two modes, or a flag of another
mode than--mode(--mode upload --file F), exit 64 (#118).- A verify of the public URL that fails exits 69 (before: 1). It waits up to
180 s (before: 20 tries in about 40 s) (#119). CFRS_WARP_TCP_BURSTwith a value that is not 1 to 430 ornoneexits 78
(before: the default, with no message) (#111).autostart adddrops a leadingcfrs, and a command that does not parse
exits 64 (#117).warp proxydoes not take a unix socket that answers (a running proxy):
the listener fails (#115).- The ready document of
relay nodehas the pair inpair(before:
name, which the name of the instance overwrote) (#119). agent up --exposegives no tunnel to a port where nothing accepts a
connection; each entry ofexposedhas astate(#119).- A new WARP session is up only when a DNS query through it got an answer
(5 s).CFRS_WARP_NO_CHECK=1turns the check off (#120). - The env file of
warp upwith no TCP listener setsCFRS_PROXYto the
unix socket, so cfrs commands in that shell use WARP (#116).
Changes for a tester
The fixes of the reports on beta.6 (#109 to #130).
WARP
- A UDP datagram to IPv6 no longer stops the userspace stack (a panic in
smoltcp before); a stack whose driver ends is replaced (#112). - The stack frees the sockets of closed connections and of connects that a
caller gave up; TCP has a time limit of 60 s and a keepalive; the end of
the data of a client goes to the peer as a FIN; the operations of a dead
session fail at once; a read that a caller gave up takes no data (#125). - The TCP window of the userspace stack stays 1 by default: on the direct
path to the front door, larger windows still stall (#100, open). Through
the WebSocket relay, no window stalled in the live runs. - A new WARP session tries the direct path first each time; the relay
starts after 3 s (0.5 s when the relay worked last), and the first
session that opens wins (#126, #76). - UDP ASSOCIATE replies
0x01when it cannot open its socket; DNS through
the tunnel is sent again after 1.2 s; a name in a datagram is resolved
once for each association, A first.docs/protocol.mddescribes the UDP
association in the stream (0x83) for a host that refuses UDP on
127.0.0.1 (#114). - A capsule longer than 64 KiB ends the session (#123). ADDRESS_ASSIGN is
parsed and logged (#121). The waiting packets go in one HTTP/2 DATA frame
(#122). - The front door is the IPv4 address of the peer, then its IPv6 address;
the one that worked goes first (#124). The leg that worked (direct or
relay) is kept inwarp-leg.json; a relay that worked in the last 6 h
goes first after a restart (#126). warp nc -u HOST PORTcarries UDP;warp probechecks UDP too (#115).warp proxy --dns ADDRandwarp up --dns ADDR: a DNS forwarder through
WARP (#117).warp proxy --max-connections N; the log has a health line
each 10 min (#117, #116).warp ssh-config --write --host Howns its block in~/.ssh/config;
--checkand--remove(#130).warp up --replace;--persistalso for zsh and fish;warp status
shows the instance;warp execandwarp shellsetCFRS_WARP_SOCKET
(#115, #116, #117).
Proxies and DNS
--proxy SCHEME+unix:/PATHand--proxy SCHEME+exec:COMMAND(a proxy at
the stdin and stdout of a command, as the ProxyCommand of SSH) (#129).- An NXDOMAIN answer of one DoH operator does not stop the chain: the next
operator is asked (#119). - A reset or a close during a TLS handshake is the hop
network, with a
hint about an egress policy, not about the CA or the clock (#127).
Pods
getaddrinfowithAF_UNSPECworks when the supervisor cannot write the
memory of the program (RES_OPTIONS=single-request) (#113).- UDP to a fake IP of the pod goes to the proxy with its name (#113).
POD_NETNS_QUIET(andcfrs -q) silence the warnings of the pod (#115).
Tunnels, share, relay and the CLI
share --fileshares the file (#118). A refused upload is read to its
end before the 413, also past the body limit (#92).serveof a directory with noindex.html: the 404 of/is not a
warning (#119).ports --probe; origins onlocalhostwith no/etc/hosts;relay stop
stops the node instances of the pair (#119).relay connectkeeps the answer when the input ends at once (#109).doctor: the relay road, the DNS answer of each name, the clock, and a
summary of the roads direct, warp and relay (#128).doctor --agent
names a synthetic resolver (#117).- cfrs raises the soft limit of open files at start;
cfrs statusshows
it (#126). cfrs bug-report: one text for a report, with no secret (#117).agent upanddoctor --agentgive noevalline whenwarp uphas no
TCP listener (#110).
What to report
Open an issue with:
- the output of
cfrs --version,cfrs statusandcfrs doctor --agent; - the command, and its output with
RUST_LOG=cfrs=debug; - the network limits of the host (proxy, UDP, ports, DNS, TLS interception).
CFRS_ERROR_PROGRAM=/path/to/program gives each failure as one JSON
document to that program, with the credentials masked.
Limits of this prerelease
- Linux only.
- A proxy that terminates TLS cannot carry the edge connection or the WARP
MASQUE connection. - The
netnsbackend ofcfrs podcarries TCP and DNS, not other UDP; use
--backend seccompornetns-rawfor other UDP. - TCP through
warp proxyandwarp uphas a small window by default
(CFRS_WARP_TCP_BURST): about 0.5 MB/s on some paths (#100, open). - The relay limits each session to 64 MiB and 12 h.
The licenses of the crates in the binaries, with their texts: THIRD-PARTY-LICENSES.md.
The commits of this release
Other
- warp: a UDP datagram to IPv6 does not stop the userspace stack (issue 112) (96939b6)
- resolve, verify: a new name that one DoH operator does not know yet (issue 119) (0775407)
- warp stack: free the sockets, time limits, half-close; UDP association fixes (issues 125, 114) (1eff505)
- capsule limit, CFRS_WARP_TCP_BURST check, agent advice, share mode, autostart args (issues 123, 111, 110, 118, 117) (25e242d)
- pod AF_UNSPEC lookups and UDP to a name; relay connect answer; TLS reset hop (issues 113, 109, 127) (3c0c030)
- live.yml: close the MASQUE connection with a TCP reset rule when ss -K fails; warp: log each close of the session (975bb84)
- ports --probe, expose probe, localhost origins, relay node pair (issue 119) (1d0e06f)
- Breaking heading of the release notes, the limit of open files, the WARP leg that worked (issue 126); live.yml: the new warp up line (b3a34ea)
- warp ssh-config --write, --remove, --check: the block in the SSH config file (issue 130) (f1c2067)
- proxy carriers: a unix socket and a command (issue 129); warp up env and exec (issue 116) (15bb151)
- doctor: the relay road, DNS of each name, the clock, and the roads (issue 128) (31a689b)
- warp: a new session is up when a packet crossed it; ADDRESS_ASSIGN; the IPv6 front door (issues 120, 121, 124) (e4bc032)
- share: a refused upload is read to its end, also past the body limit (issue 92, live run 41556133042) (3ab5dd1)
- QOL: warp nc note, a live socket is kept, warp up --replace, zsh and fish, POD_NETNS_QUIET, warp status instance, persist files, crontab check (issues 115, 116, 117) (194dc4b)
- warp: the packets that wait go out in one DATA frame (issue 122) (e10b03e)
- warp proxy --max-connections, client counters and a health line; doctor --agent: a synthetic resolver (issues 117, 116) (f2b3e62)
- warp nc -u and the UDP line of warp probe (issue 115) (205bece)
- fmt: the signatures of nc.rs (746a864)
- warp proxy --dns and warp up --dns: a DNS forwarder through WARP (issue 117) (e50cff4)
- warp: the default TCP window of the userspace stack is 8 (issue 100) (acc57e6)
- cfrs bug-report: one text for a report, with no secret (issue 117) (40037ea)
- Version 0.3.0-beta.7; release notes (7d576d8)
- warp: the direct path first for each session, the relay after a delay; the leg in the live table (issues 126, 100) (fb8803f)
- warp: the default TCP window is 1 again; live.yml: A/B with the binary of beta.6 (issue 100) (9fe4073)