77package netstack
88
99import (
10+ "github.com/celzero/firestack/intra/settings"
1011 "gvisor.dev/gvisor/pkg/tcpip"
1112 "gvisor.dev/gvisor/pkg/tcpip/network/ipv4"
1213 "gvisor.dev/gvisor/pkg/tcpip/network/ipv6"
@@ -15,40 +16,43 @@ import (
1516)
1617
1718func SetNetstackOpts (s * stack.Stack ) {
19+ loopback := settings .Loopingback .Load ()
1820 // TODO: other stack otps?
1921 // github.com/xjasonlyu/tun2socks/blob/31468620e/core/option/option.go#L69
2022
2123 // TODO: setup protocol opts?
2224 // github.com/google/gvisor/blob/ef9e8d91/test/benchmarks/tcp/tcp_proxy.go#L233
23- sack := tcpip .TCPSACKEnabled (true )
25+ sack := tcpip .TCPSACKEnabled (loopback )
2426 _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & sack )
2527
26- // from: github.com/telepresenceio/telepresence/blob/ab7dda7d55/pkg/vif/stack.go#L232
27- // Enable Receive Buffer Auto-Tuning, see: github.com/google/gvisor/issues/1666
28- bufauto := tcpip .TCPModerateReceiveBufferOption (true )
29- _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & bufauto )
30-
31- // probably a bad idea? github.com/tailscale/tailscale/blob/9d9a70d81d/wgengine/netstack/netstack.go#L330
32- // coder.com/blog/delivering-5x-faster-throughput-in-coder-2-12-0
33- // ccopt := tcpip.CongestionControlOption("cubic")
34- // _ = s.SetTransportProtocolOption(tcp.ProtocolNumber, &ccopt)
35-
36- ttl := tcpip .DefaultTTLOption (128 )
37- s .SetNetworkProtocolOption (ipv4 .ProtocolNumber , & ttl )
38- s .SetNetworkProtocolOption (ipv6 .ProtocolNumber , & ttl )
39-
40- // github.com/tailscale/tailscale/blob/c4d0237e5c/wgengine/netstack/netstack_tcpbuf_default.go
41- tcpRXBufOpt := tcpip.TCPReceiveBufferSizeRangeOption {
42- Min : tcp .MinBufferSize ,
43- Default : tcp .DefaultSendBufferSize ,
44- Max : 8 << 20 , // 8MiB
28+ if loopback {
29+ // from: github.com/telepresenceio/telepresence/blob/ab7dda7d55/pkg/vif/stack.go#L232
30+ // Enable Receive Buffer Auto-Tuning, see: github.com/google/gvisor/issues/1666
31+ bufauto := tcpip .TCPModerateReceiveBufferOption (true )
32+ _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & bufauto )
33+
34+ // probably a bad idea? github.com/tailscale/tailscale/blob/9d9a70d81d/wgengine/netstack/netstack.go#L330
35+ // coder.com/blog/delivering-5x-faster-throughput-in-coder-2-12-0
36+ // ccopt := tcpip.CongestionControlOption("cubic")
37+ // _ = s.SetTransportProtocolOption(tcp.ProtocolNumber, &ccopt)
38+
39+ ttl := tcpip .DefaultTTLOption (128 )
40+ s .SetNetworkProtocolOption (ipv4 .ProtocolNumber , & ttl )
41+ s .SetNetworkProtocolOption (ipv6 .ProtocolNumber , & ttl )
42+
43+ // github.com/tailscale/tailscale/blob/c4d0237e5c/wgengine/netstack/netstack_tcpbuf_default.go
44+ tcpRXBufOpt := tcpip.TCPReceiveBufferSizeRangeOption {
45+ Min : tcp .MinBufferSize ,
46+ Default : tcp .DefaultSendBufferSize ,
47+ Max : 8 << 20 , // 8MiB
48+ }
49+ tcpTXBufOpt := tcpip.TCPSendBufferSizeRangeOption {
50+ Min : tcp .MinBufferSize ,
51+ Default : tcp .DefaultReceiveBufferSize ,
52+ Max : 6 << 20 , // 6MiB
53+ }
54+ // github.com/tailscale/tailscale/blob/c4d0237e5c/wgengine/netstack/netstack.go#L329
55+ _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & tcpRXBufOpt )
56+ _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & tcpTXBufOpt )
4557 }
46- tcpTXBufOpt := tcpip.TCPSendBufferSizeRangeOption {
47- Min : tcp .MinBufferSize ,
48- Default : tcp .DefaultReceiveBufferSize ,
49- Max : 6 << 20 , // 6MiB
50- }
51- // github.com/tailscale/tailscale/blob/c4d0237e5c/wgengine/netstack/netstack.go#L329
52- _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & tcpRXBufOpt )
53- _ = s .SetTransportProtocolOption (tcp .ProtocolNumber , & tcpTXBufOpt )
5458}
0 commit comments