Skip to content

Commit 80a90f0

Browse files
committed
feat: support AmneziaWG v2.0
1 parent 3b63fef commit 80a90f0

4 files changed

Lines changed: 56 additions & 45 deletions

File tree

adapter/outbound/wireguard.go

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -87,26 +87,26 @@ type WireGuardPeerOption struct {
8787
}
8888

8989
type AmneziaWGOption struct {
90-
JC int `proxy:"jc,omitempty"`
91-
JMin int `proxy:"jmin,omitempty"`
92-
JMax int `proxy:"jmax,omitempty"`
93-
S1 int `proxy:"s1,omitempty"`
94-
S2 int `proxy:"s2,omitempty"`
95-
H1 uint32 `proxy:"h1,omitempty"`
96-
H2 uint32 `proxy:"h2,omitempty"`
97-
H3 uint32 `proxy:"h3,omitempty"`
98-
H4 uint32 `proxy:"h4,omitempty"`
99-
100-
// AmneziaWG v1.5
101-
I1 string `proxy:"i1,omitempty"`
102-
I2 string `proxy:"i2,omitempty"`
103-
I3 string `proxy:"i3,omitempty"`
104-
I4 string `proxy:"i4,omitempty"`
105-
I5 string `proxy:"i5,omitempty"`
106-
J1 string `proxy:"j1,omitempty"`
107-
J2 string `proxy:"j2,omitempty"`
108-
J3 string `proxy:"j3,omitempty"`
109-
Itime int64 `proxy:"itime,omitempty"`
90+
JC int `proxy:"jc,omitempty"`
91+
JMin int `proxy:"jmin,omitempty"`
92+
JMax int `proxy:"jmax,omitempty"`
93+
S1 int `proxy:"s1,omitempty"`
94+
S2 int `proxy:"s2,omitempty"`
95+
S3 int `proxy:"s3,omitempty"` // AmneziaWG v1.5 and v2
96+
S4 int `proxy:"s4,omitempty"` // AmneziaWG v1.5 and v2
97+
H1 string `proxy:"h1,omitempty"` // In AmneziaWG v1.x, it was uint32, but our WeaklyTypedInput can handle this situation
98+
H2 string `proxy:"h2,omitempty"` // In AmneziaWG v1.x, it was uint32, but our WeaklyTypedInput can handle this situation
99+
H3 string `proxy:"h3,omitempty"` // In AmneziaWG v1.x, it was uint32, but our WeaklyTypedInput can handle this situation
100+
H4 string `proxy:"h4,omitempty"` // In AmneziaWG v1.x, it was uint32, but our WeaklyTypedInput can handle this situation
101+
I1 string `proxy:"i1,omitempty"` // AmneziaWG v1.5 and v2
102+
I2 string `proxy:"i2,omitempty"` // AmneziaWG v1.5 and v2
103+
I3 string `proxy:"i3,omitempty"` // AmneziaWG v1.5 and v2
104+
I4 string `proxy:"i4,omitempty"` // AmneziaWG v1.5 and v2
105+
I5 string `proxy:"i5,omitempty"` // AmneziaWG v1.5 and v2
106+
J1 string `proxy:"j1,omitempty"` // AmneziaWG v1.5 only (removed in v2)
107+
J2 string `proxy:"j2,omitempty"` // AmneziaWG v1.5 only (removed in v2)
108+
J3 string `proxy:"j3,omitempty"` // AmneziaWG v1.5 only (removed in v2)
109+
Itime int64 `proxy:"itime,omitempty"` // AmneziaWG v1.5 only (removed in v2)
110110
}
111111

112112
type wgSingErrorHandler struct {
@@ -412,17 +412,23 @@ func (w *WireGuard) genIpcConf(ctx context.Context, updateOnly bool) (string, er
412412
if w.option.AmneziaWGOption.S2 != 0 {
413413
ipcConf += "s2=" + strconv.Itoa(w.option.AmneziaWGOption.S2) + "\n"
414414
}
415-
if w.option.AmneziaWGOption.H1 != 0 {
416-
ipcConf += "h1=" + strconv.FormatUint(uint64(w.option.AmneziaWGOption.H1), 10) + "\n"
415+
if w.option.AmneziaWGOption.S3 != 0 {
416+
ipcConf += "s3=" + strconv.Itoa(w.option.AmneziaWGOption.S3) + "\n"
417417
}
418-
if w.option.AmneziaWGOption.H2 != 0 {
419-
ipcConf += "h2=" + strconv.FormatUint(uint64(w.option.AmneziaWGOption.H2), 10) + "\n"
418+
if w.option.AmneziaWGOption.S4 != 0 {
419+
ipcConf += "s4=" + strconv.Itoa(w.option.AmneziaWGOption.S4) + "\n"
420420
}
421-
if w.option.AmneziaWGOption.H3 != 0 {
422-
ipcConf += "h3=" + strconv.FormatUint(uint64(w.option.AmneziaWGOption.H3), 10) + "\n"
421+
if w.option.AmneziaWGOption.H1 != "" {
422+
ipcConf += "h1=" + w.option.AmneziaWGOption.H1 + "\n"
423423
}
424-
if w.option.AmneziaWGOption.H4 != 0 {
425-
ipcConf += "h4=" + strconv.FormatUint(uint64(w.option.AmneziaWGOption.H4), 10) + "\n"
424+
if w.option.AmneziaWGOption.H2 != "" {
425+
ipcConf += "h2=" + w.option.AmneziaWGOption.H2 + "\n"
426+
}
427+
if w.option.AmneziaWGOption.H3 != "" {
428+
ipcConf += "h3=" + w.option.AmneziaWGOption.H3 + "\n"
429+
}
430+
if w.option.AmneziaWGOption.H4 != "" {
431+
ipcConf += "h4=" + w.option.AmneziaWGOption.H4 + "\n"
426432
}
427433
if w.option.AmneziaWGOption.I1 != "" {
428434
ipcConf += "i1=" + w.option.AmneziaWGOption.I1 + "\n"

docs/config.yaml

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -862,20 +862,25 @@ proxies: # socks5
862862
# jmax: 501
863863
# s1: 30
864864
# s2: 40
865-
# h1: 123456
866-
# h2: 67543
867-
# h4: 32345
868-
# h3: 123123
869-
# # AmneziaWG v1.5
870-
# i1: <b 0xf6ab3267fa><c><b 0xf6ab><t><r 10><wt 10>
871-
# i2: <b 0xf6ab3267fa><r 100>
872-
# i3: ""
873-
# i4: ""
874-
# i5: ""
875-
# j1: <b 0xffffffff><c><b 0xf6ab><t><r 10>
876-
# j2: <c><b 0xf6ab><t><wt 1000>
877-
# j3: <t><b 0xf6ab><c><r 10>
878-
# itime: 60
865+
# s3: 50 # AmneziaWG v1.5 and v2
866+
# s4: 5 # AmneziaWG v1.5 and v2
867+
# h1: 123456 # AmneziaWG v1.0 and v1.5
868+
# h2: 67543 # AmneziaWG v1.0 and v1.5
869+
# h3: 123123 # AmneziaWG v1.0 and v1.5
870+
# h4: 32345 # AmneziaWG v1.0 and v1.5
871+
# h1: 123456-123500 # AmneziaWG v2.0 only
872+
# h2: 67543-67550 # AmneziaWG v2.0 only
873+
# h3: 123123-123200 # AmneziaWG v2.0 only
874+
# h4: 32345-32350 # AmneziaWG v2.0 only
875+
# i1: <b 0xf6ab3267fa><c><b 0xf6ab><t><r 10><wt 10> # AmneziaWG v1.5 and v2
876+
# i2: <b 0xf6ab3267fa><r 100> # AmneziaWG v1.5 and v2
877+
# i3: "" # AmneziaWG v1.5 and v2
878+
# i4: "" # AmneziaWG v1.5 and v2
879+
# i5: "" # AmneziaWG v1.5 and v2
880+
# j1: <b 0xffffffff><c><b 0xf6ab><t><r 10> # AmneziaWG v1.5 only (removed in v2)
881+
# j2: <c><b 0xf6ab><t><wt 1000> # AmneziaWG v1.5 only (removed in v2)
882+
# j3: <t><b 0xf6ab><c><r 10> # AmneziaWG v1.5 only (removed in v2)
883+
# itime: 60 # AmneziaWG v1.5 only (removed in v2)
879884

880885
# tuic
881886
- name: tuic

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ require (
1414
github.com/insomniacslk/dhcp v0.0.0-20250109001534-8abf58130905
1515
github.com/klauspost/compress v1.17.9 // lastest version compatible with golang1.20
1616
github.com/mdlayher/netlink v1.7.2
17-
github.com/metacubex/amneziawg-go v0.0.0-20250820070344-732c0c9d418a
17+
github.com/metacubex/amneziawg-go v0.0.0-20250902133113-a7f637c14281
1818
github.com/metacubex/bart v0.20.5
1919
github.com/metacubex/bbolt v0.0.0-20250725135710-010dbbbb7a5b
2020
github.com/metacubex/blake3 v0.1.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/
9090
github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw=
9191
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
9292
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
93-
github.com/metacubex/amneziawg-go v0.0.0-20250820070344-732c0c9d418a h1:c1QSGpacSeQdBdWcEKZKGuWLcqIG2wxHEygAcXuDwS4=
94-
github.com/metacubex/amneziawg-go v0.0.0-20250820070344-732c0c9d418a/go.mod h1:MsM/5czONyXMJ3PRr5DbQ4O/BxzAnJWOIcJdLzW6qHY=
93+
github.com/metacubex/amneziawg-go v0.0.0-20250902133113-a7f637c14281 h1:09EM0sOLb2kfL0KETGhHujsBLB5iy5U/2yHRHsxf/pI=
94+
github.com/metacubex/amneziawg-go v0.0.0-20250902133113-a7f637c14281/go.mod h1:MsM/5czONyXMJ3PRr5DbQ4O/BxzAnJWOIcJdLzW6qHY=
9595
github.com/metacubex/ascon v0.1.0 h1:6ZWxmXYszT1XXtwkf6nxfFhc/OTtQ9R3Vyj1jN32lGM=
9696
github.com/metacubex/ascon v0.1.0/go.mod h1:eV5oim4cVPPdEL8/EYaTZ0iIKARH9pnhAK/fcT5Kacc=
9797
github.com/metacubex/bart v0.20.5 h1:XkgLZ17QxfxkqKdGsojoM2Zu01mmHyyQSFzt2/calTM=

0 commit comments

Comments
 (0)