Repository navigation
Releases
Simplerxy-1.0.6
1.0.6
Chỉnh chọt (VI):
Cơ chế nội bộ của Simplerxy là xài dnsIP \ dnsFallback phân giải IP của domain DoH/DoT (vd: https://dns.google/dns-query)
Khi phân giải được IP của domain DoH/DoT thì ghi nhớ rồi gửi tới pha xài cho client
Client theo thứ tự ưu tiên đầu DoH > DoT > dnsIP > dnsFallback. Từ đây mới nảy ra ý đồ bổ sung dnsForceIP.
Tham số dnsForceIP - cưỡng ép IP cho dmain, chạy nền trong (internal). Tính năng nội tại bị động chỉ chạy khi:
- Không phân giải được IP của domain DoH/DoT (do phía ngoài chặn domain này)
- Bị nhà mạng gán IP pha ke loopback như
127.0.0.1\0.0.0.0\::1\:: - Nhà mạng ép thành IP khác cũng không lo, vì sai chứng chỉ, dẫn tới thất bại rồi
dnsForceIP = dns.google[8.8.8.8|8.8.4.4]; cloudflare-dns.com[104.16.249.249|104.16.248.249]
Không có tập tin config.conf, không có dòng dnsForceIP, hoặc khai báo tá lả âm binh sai bét: dùng mặc định hard-code
Có dòng dnsForceIP: ghi đè hoàn toàn, không trộn với mặc định. Thiếu domain nào thì domain đó không có IP dự phòng.
Để trống dnsForceIP: tắt tính năng.
Tạm điều chỉnh vì lỗi bảo mật kernel MPTCP khi xài linux: CVE-2026-98432
Làm cho có tụ xôm xôm thôi, chứ ổn nhứt là update kernel đi.
//go:debug multipathtcp=0
package main
lc := net.ListenConfig{}
lc.SetMultipathTCP(false)
listener, err := lc.Listen(context.Background(), "tcp", config.ListenAddress)
Chỉ tác động với kernel linux, chưa ghi nhận MacOS/Windows
go version -m Simplerxy-linux-amd64
Simplerxy-linux-amd64: go1.27.3
path command-line-arguments
build -buildmode=exe
build -compiler=gc
build -trimpath=true
build DefaultGODEBUG=multipathtcp=0
build CGO_ENABLED=0
build GOARCH=amd64
build GOOS=linux
build GOAMD64=v1
Fixed (EN):
Simplerxy's internal mechanism uses dnsIP \ dnsFallback to resolve the IP of DoH/DoT domains (e.g., https://dns.google/dns-query)
Once the IP of the DoH/DoT domain is resolved, it is cached and then sent to be used for the client.
The client follows this priority order: DoH > DoT > dnsIP > dnsFallback. From this, the idea to add dnsForceIP was born.
The dnsForceIP parameter - force IP for a domain, running internally in the background. This passive internal feature only runs when:
- The IP of the DoH/DoT domain cannot be resolved (due to external domain blocking).
- The ISP assigns fake loopback IPs like
127.0.0.1\0.0.0.0\::1\:: - Even if the ISP forces a different IP, there's no need to worry, because of certificate mismatch, which leads to a failure anyway
dnsForceIP = dns.google[8.8.8.8|8.8.4.4]; cloudflare-dns.com[104.16.249.249|104.16.248.249]
No config.conf file, no dnsForceIP line, or messy/incorrect configuration: defaults to hard-coded values.
With the dnsForceIP line: completely overrides, does not mix with defaults. Any missing domain will not have a fallback IP.
Leave dnsForceIP empty: disables the feature.
Temporary adjustment due to the Linux kernel MPTCP security vulnerability: CVE-2026-98432
Just doing this for good measure, but updating the kernel is still the best way to go.
//go:debug multipathtcp=0
package main
lc := net.ListenConfig{}
lc.SetMultipathTCP(false)
listener, err := lc.Listen(context.Background(), "tcp", config.ListenAddress)
Only affects the Linux kernel; no incidents recorded on macOS/Windows yet.
go version -m Simplerxy-linux-amd64
Simplerxy-linux-amd64: go1.27.3
path command-line-arguments
build -buildmode=exe
build -compiler=gc
build -trimpath=true
build DefaultGODEBUG=multipathtcp=0
build CGO_ENABLED=0
build GOARCH=amd64
build GOOS=linux
build GOAMD64=v1
Simplerxy-1.0.5
1.0.5
Chỉnh chọt (VI):
Lỗi idleTimeout: khi client đóng mà dest chưa đóng. Đã fix cho dest đóng theo
Hiện tại sợ tràn bộ nhớ đệm khi có nhu cầu socker UDP cao (QUIC, HTTP/3, video). Vậy gán trần là 4MB luôn khi LISTEN (lúc tạo thì 1MB thôi):
udpListener.SetReadBuffer
udpListener.SetWriteBuffer
Giá trị 4MB này chỉ có hiệu lực khi gán trần bằng hoặc cao hơn 4MB trong hệ thống Linux. Còn Windows không sao.
sysctl -w net.core.rmem_max=4194304
sysctl -w net.core.wmem_max=4194304
Khắc phục vòng lặp Simplerxy tự gọi chính nó, cũng như client vô tình (cố ý) có IP:PORT y chang Simplerxy.
Client này gửi yêu cầu CONNECT tới proxy. Kết nối này tạo ra vòng lặp vô tận ăn hết các slot kết nối (maxConcurrentConns).
Nếu config.conf gán dnsLocalDomain = .coca; .local; .lan, mỗi khi truy vấn các domain/host có đuôi đó, thì sẽ nhảy xuống bộ phân giải của hệ thống. Khi không có giá trị (rỗng), tính năng này sẽ bị loại bỏ, không đẩy thêm bất kỳ yêu cầu phân giải DNS nào xuống hệ thống (lẽ ra cấu hình thêm DNS IP nội bộ để thắt chặt phân giải, nhưng thiết nghĩ chưa cần thiết).
Xét UDP client theo IP:PORT (trước đó chỉ IP), (RFC 1928)
Giới hạn lại tối đa 5000 UDP socket. Mỗi UDP association max ga 256 socket (maxUDPTargets)
Giới hạn 128 goroutine resolve DNS nền cho UDP chạy cùng lúc
Nội bộ (Bootstrap): Cố định cache âm 30s cho mọi loại lỗi phân giải (timeout, connection refused, fail toàn tập...) để tránh spam UDP/DoX.
Client: Cache âm theo thời gian cấu hình DNSCacheExp trong config.conf (60s). Đồng thời in chi tiết loại lỗi (ví dụ: NXDOMAIN, Timeout, Connection Error...) ra console log khi lưu cache.
Khi client ngắt kết nối SOCKS5 đột ngột, ép hủy goroutine phân giải DNS nền. Không cần báo gì cho mệt mỏi
DNS nào lỗi timeout, dial, network thì cho nghỉ 10 giây, sau đó mới query lại
UDP ưu tiên IPv4 trước để chống rớt ngầm IPv6 (UDP không có handshake nên không biết v6 chết), v6 để phía sau làm sơ cua khi DialUDP/Write lỗi
Fixes (EN):
Fixed an issue idleTimeout: where the destination did not close when the client closed. Now fixed so the destination closes accordingly.
Currently, UDP buffer limit, there is a concern about buffer overflow under high UDP socket demands (QUIC, HTTP/3, video). Therefore, set a ceiling of 4MB when LISTEN (initially 1MB upon creation):
udpListener.SetReadBuffer
udpListener.SetWriteBuffer
This 4MB value only takes effect if the system ceiling is set to 4MB or higher on Linux. Windows is unaffected
sysctl -w net.core.rmem_max=4194304
sysctl -w net.core.wmem_max=4194304
Mitigated the infinite loop where Simplerxy calls itself, or when a client accidentally (or intentionally) has the exact same IP:PORT as Simplerxy. This client sent a CONNECT request to the proxy, creating an endless loop that exhausted all connection slots (maxConcurrentConns).
If dnsLocalDomain = .coca; .local; .lan is assigned in config.conf, any queries for domains/hosts ending with those suffixes will fall back to the system resolver. When left empty, this feature is disabled, preventing any additional DNS resolution requests from being pushed to the system (originally considered configuring internal DNS IPs to tighten resolution, but deemed unnecessary for now).
Track UDP clients by IP:PORT instead of IP alone (RFC 1928).
Limited to a maximum of 5,000 UDP sockets. Each UDP association is capped at 256 sockets (maxUDPTargets).
Limited background DNS resolution goroutines for UDP to 128 concurrent executions.
Internal (Bootstrap): Fixed a 30-second negative cache for all types of resolution errors (timeout, connection refused, complete failure, etc.) to prevent UDP/DoX spam.
Client: Negative caching based on the DNSCacheExp configuration time in config.conf (60s). At the same time, print detailed error types (e.g., NXDOMAIN, Timeout, Connection Error, etc.) to the console log when caching.
When a SOCKS5 client suddenly disconnects, force-kill the background DNS resolution goroutine. No need to log redundant notifications.
Any DNS encountering timeout, dial, or network errors is put on a 10-second cooldown before querying again.
Prioritize IPv4 for UDP to prevent silent IPv6 drops (since UDP lacks a handshake, it cannot detect if v6 is dead); place v6 as a backup when DialUDP/Write fails.
Simplerxy-1.0.4
1.0.4
Chỉnh chọt (VI):
Bổ sung tiêu chuẩn boostrap DNS. Boostrap thì phân giải DoH/DoT rồi cache lại 5 phút
Sửa vấn đề liên quan NXDOMAIN: khi domain không tồn tại thì bỏ qua luôn, không truyền xuống các DNS khác để tránh mới thời gian.
Fixed (EN):
Boostrap DNS standard addition: Add the Bootstrap DNS standard. Bootstrap resolves DoH/DoT and caches the results for 5 minutes.
NXDOMAIN issue fix: Fix the issue related to NXDOMAIN - when a domain does not exist, drop it immediately and do not forward it to other DNS servers to avoid wasting time.
Simplerxy-1.0.3
1.0.3
Chỉnh chọt (VI):
Bổ sung phần allowPrivateDest = 192.168.0.0/16;10.10.0.0/16. Giải quyết việc không truy cập IP nội bộ được.
Sửa lỗi treo cứng phân giải DNS khi xài SOCKS5 UDP
Cho UDP cache IP đã phân giải tạm thời để tránh bị mất gói đầu, đồng thời xóa cache dạng cuốn chiếu khi đầy mà chưa hết giờ
Tinh chỉnh lại vài thứ
Fixed (EN):
Add allowPrivateDest = 192.168.0.0/16;10.10.0.0/16 to fix the issue where internal IPs could not be accessed.
Fix a hard lock/hang issue in DNS resolution when using SOCKS5 UDP.
Implement temporary UDP caching for resolved IPs to prevent initial packet drops, along with a rolling eviction cache when it becomes full before expiration.
Fine-tune a few things.
Simplerxy-1.0.2
Khắc phục, chỉnh sửa tè le hết vẫn chưa hết
Vấn đề còn tồn đọng (VI):
Simplerxy sẽ chặn toàn bộ dãy IP thuộc hệ riêng tư ở chiều đi ra:
Client > tới được Simplerxy vì clientAllowlist cho phép > chặn IP riêng tư vì allowPrivateIP = no.
Thí dụ: máy cá nhân > Simplerxy > tới NAS bị chặn (thuộc IP riêng tư là chặn).
Không nên đặt allowPrivateIP = yes kém an ninh, chỉ xài khi debug/kiểm thử.
Sẽ bổ sung cơ chế cho phép đi tới IP riêng tư:
allowPrivateDest = 192.168.20.0/24;10.0.0.0/16;...
Thiết đặt chỉ :3979 cho config.conf để hỗ trợ chạy song song IPv4/6 luôn. Giới trí thức người ta xà lơ sà cân là "dual-stack".
listenAddress = :3979
Xong:
Gỡ bỏ graceful shutdown (trước khi thật sự thoát sẽ báo) cho gọn mã nguồn. Nhận tín hiệu diệt là thoát, khỏi báo gì hết.
Fixed treething, fourthing, and something, ...
Outstanding Issue
Simplerxy will block all private IP ranges on the outbound traffic:
Client > reaches Simplerxy because clientAllowlist permits it > blocks private IPs because allowPrivateIP = no.
Example: Personal machine > Simplerxy > access to NAS is blocked (blocked because it belongs to a private IP).
Setting allowPrivateIP = yes is not recommended due to security risks; it should only be used for debugging or testing purposes.
A mechanism will be added to allow traffic to specific private IPs:
allowPrivateDest = 192.168.20.0/24;10.0.0.0/16;...
Bind :3979 directly in config.conf to support running IPv4/v6 in parallel out of the box. Intellectuals like to call this fancy stuff "dual-stack".
listenAddress = :3979
Finish:
Remove graceful shutdown to simplify the codebase. Exit immediately upon receiving a termination signal.
Simplerxy-1.0.1
Đã biên dịch ra binary hoàn tất, chỉ đem về và chạy.
Có gì khác (VI):
Hỗ trợ IPv4 và IPv6. Mặc định ưu tiên IPv6, nếu có vấn đề thì trả về IPv4 . Cơ chế Happy Eyeballs (RFC 8305) thu nhỏ.
curl -I https://medium.com -x localhost:3979
curl -I https://medium.com --socks5 localhost:3979
Truy vấn DNS cùng lúc cho cả IPv4/IPv6, nhưng cơ bản vẫn để logic như trên. Lý do theo dòng thời gian mà ta du ngoạn, IPv6 sẽ "tới thời".
2026/10/19 21:49:25 [DNS SUCCESS] Resolved medium.com -> [2606:4700:7::a29f:9804 2606:4700:7::a29f:9904 162.159.153.4 162.159.152.4] via DoH (https://cloudflare-dns.com/dns-query)
2026/10/19 21:49:25 [DNS CACHE STORE] Cached medium.com -> [2606:4700:7::a29f:9804 2606:4700:7::a29f:9904 162.159.153.4 162.159.152.4] (Exp: 1m0s)
2026/10/19 21:49:25 [HTTP CONNECT] Established connection to medium.com:443 (162.159.153.4:443)
2026/10/19 21:49:38 [DNS CACHE HIT] Resolved medium.com -> [2606:4700:7::a29f:9804 2606:4700:7::a29f:9904 162.159.153.4 162.159.152.4] from cache
Chặn giả mạo DNS (DNS Spoofing). Chuyển việc sinh Transaction ID sang dùng crypto/rand (bảo mật) kết hợp kiểm tra biên mảng an toàn trong hàm parseDNSResponse, vô hiệu hóa trò chèn ép kết quả phân giải của nhà mạng.
UDP relay được gán đúng IP cấu hình và chỉ chấp nhận gói tin từ đúng IP của client đã thiết lập phiên TCP trước đó; chặn tình trạng gói tin rác, giả mạo
Bổ sung chỉ cho phép client IP nào được xài proxy trong config.conf.
clientAllowlist: 127.0.0.1; 192.168.0.0/16; ::1
Chặn truy cập ngược từ ngoài vào proxy, rồi từ proxy truy về IP local
allowPrivateIP: no
Sửa lỗi DNS cache chỉ đánh dấu là hết hạn mà chưa dọn dẹp
Tối ưu hóa hiệu năng và vài thứ khác
What's new (EN):
Supports IPv4 and IPv6. IPv6 is preferred by default, falling back to IPv4 if any issues occur. Implements the Happy Eyeballs mechanism (RFC 8305).
curl -I https://medium.com -x localhost:3979
curl -I https://medium.com --socks5 localhost:3979
Queries DNS for both IPv4/IPv6 simultaneously, while keeping the core logic as described above. As time goes on, IPv6's time has come.
2026/10/19 21:49:25 [DNS SUCCESS] Resolved medium.com -> [2606:4700:7::a29f:9804 2606:4700:7::a29f:9904 162.159.153.4 162.159.152.4] via DoH (https://cloudflare-dns.com/dns-query)
2026/10/19 21:49:25 [DNS CACHE STORE] Cached medium.com -> [2606:4700:7::a29f:9804 2606:4700:7::a29f:9904 162.159.153.4 162.159.152.4] (Exp: 1m0s)
2026/10/19 21:49:25 [HTTP CONNECT] Established connection to medium.com:443 (162.159.153.4:443)
2026/10/19 21:49:38 [DNS CACHE HIT] Resolved medium.com -> [2606:4700:7::a29f:9804 2606:4700:7::a29f:9904 162.159.153.4 162.159.152.4] from cache
Mitigates DNS spoofing. Switched Transaction ID generation to use crypto/rand for security, combined with safe array bounds checking in parseDNSResponse to neutralize ISP DNS pollution/injection.
Bound UDP relay to the configured IP, and strictly accept packets only from the exact client IP that established the prior TCP session; blocks spam and spoofed packets.
Added client IP allowlisting for proxy usage via config.conf:
clientAllowlist: 127.0.0.1; 192.168.0.0/16; ::1
Blocked reflection/SSRF attempts where external traffic accesses the proxy and routes back to local IPs:
allowPrivateIP: no
Fixed a bug where DNS cache entries were only marked as expired without being cleaned up.
Performance optimizations and various minor improvements.
Simplerxy-1.0.0
Đã biên dịch ra binary hoàn tất, chỉ đem về và chạy.
Có gì khác (VI):
Kiểm tra DNS ổn hay không, hiển thị OK hoặc FAILED
- Kiểm tra nội bộ: Fallback > Direct IP > DoH > DoT
- Kiểm tra cho người dùng: DoH > DoT > Direct IP > Fallback
Bổ sung cache DNS, hiển thị cache DNS trong quá trình chạy
Bổ sung SOCKS5 (TCP/UDP)
- HTTP Proxy:
curl -I https://medium.com -x localhost:3979 - SOCKS5 Proxy:
curl -I https://medium.com --socks5 localhost:3979
Trên Windows, dùng Notepad mở WINDOWS_PROXY_TOGGLE.bat, tìm Simplerxy-win-amd64.exe rồi thay phiên bản 64bit hay 32bit, chạy bậy là ăn cám, lưu lại. Bấm vào nó để chạy, nếu có hiện bảng firewall hỏi thì bấm "Yes" hay "Allow". Xài xong, bấm dấu X trên cửa sổ dòng lệnh là được, nó sẽ tự trả về mặc định Windows như hồi chưa chạy proxy này. Hông xài nữa thì xóa tập tin .exe đi, vào Windows Firewall tìm mục đã thêm rồi xóa. Windows không hỗ trợ sẵn SOCKS5, nên kết hợp thêm ProxyBrige nếu muốn ép ứng dụng đi qua SOCKS5.
What's new (EN):
Check if DNS is working properly or not, display OK or FAILED
- Internal check: Fallback > Direct IP > DoH > DoT
- User check: DoH > DoT > Direct IP > Fallback
Add DNS caching, display DNS cache during execution
Add SOCKS5 (TCP/UDP)
- HTTP Proxy:
curl -I https://medium.com -x localhost:3979 - SOCKS5 Proxy:
curl -I https://medium.com --socks5 localhost:3979
On Windows, open WINDOWS_PROXY_TOGGLE.bat using Notepad, find Simplerxy-win-amd64.exe and replace it with either the 64-bit or 32-bit version - running the wrong one will break things, then save the file. Double-click to run it; if the firewall popup appears, click "Yes" or "Allow". Once finished, simply click the X button on the command prompt window; it will automatically restore Windows to its default settings as before running this proxy. If you no longer use it, delete the .exe file, then go to Windows Firewall to find and remove the added entry. Since Windows does not natively support SOCKS5, combine it with ProxyBridge if you want to force applications through SOCKS5.

Simplerxy-0.0.4
Đã biên dịch ra binary hoàn tất, chỉ đem về và chạy.
- Có gì khác: bổ sung cấu hình DNS bên trong Simplerxy, chủ động bật tắt coi log truy vấn DNS.
- Vấn đề gì còn tồn động: chưa mần chức năng cache DNS (hiển thị lịch sử truy vấn cache, dung lượng cache Megabyte, thời gian cache N giây). Lý do não hết suy nghĩ được rồi, vừa học vừa mần, lú lẫn thế sự.
- Trên Windows, dùng Notepad mở
WINDOWS_PROXY_TOGGLE.bat, tìmSimplerxy-win-amd64.exerồi thay phiên bản 64bit hay 32bit, chạy bậy là ăn cám, lưu lại. Bấm vào nó để chạy, nếu có hiện bảng firewall hỏi thì bấm "Yes" hay "Allow". Xài xong, bấm dấuXtrên cửa sổ dòng lệnh là được, nó sẽ tự trả về mặc định Windows như hồi chưa chạy proxy này. Hông xài nữa thì xóa tập tin.exeđi, vào Windows Firewall tìm mục đã thêm rồi xóa.
Compiled to binary, just download and run.
- What's new: Added DNS configuration directly inside Simplerxy, allowing you to manually toggle and view DNS query logs.
- Known issues / Pending features: DNS caching has not been implemented yet (showing cached query history, cache size in Megabytes, cache TTL in N seconds). Reason: My brain completely fried. Learning while coding made me lose my mind.
- On Windows: Open
WINDOWS_PROXY_TOGGLE.batwith Notepad, locateSimplerxy-win-amd64.exe, and replace it with your actual executable 32-bit or 64-bit version - run the wrong one and you're cooked. Save the file, then click to run it. If a firewall popup appears, click "Yes" or "Allow". When you're done, just close the command prompt window by clickingX, and Windows will automatically revert to its default state. If you no longer need it, delete the.exefile, then open Windows Firewall to find and delete the added rule.
Simplerxy-0.0.3
Đã biên dịch ra binary hoàn tất, chỉ đem về và chạy.
- Có gì khác: thêm ngẫu nhiên ngủ, ngẫu nhiên cắt đoạn.
- Vấn đề gì còn tồn động: chưa thể ngẫu nhiên ký tự hoa/thường vì lỗi TLS không cho.
- Trên Windows mở Terminal lên rồi chạy trực tiếp
Simplerxy-win-amd64.exe(hoặcSimplerxy-win-386.exe), nếu có hiện bảng firewall hỏi thì chỉ chọn profile là "Public", bấm "Yes" hay "Allow". Hông xài nữa thì xóa tập tin.exeđi, vào Windows Firewall tìm mục đã thêm rồi xóa.
Compiled into binary, just download and run.
- Other features: added random sleep, random segmentation.
- Remaining issues: cannot randomly select uppercase/lowercase characters due to a TLS error.
- On Windows, open the Terminal and run
Simplerxy-win-amd64.exe(orSimplerxy-win-386.exe) directly. If a firewall prompt appears, select the "Public" profile and click "Yes" or "Allow." When you are finished using it, delete the.exefile, then go to Windows Firewall, locate the added entry, and remove it.
Simplerxy-0.0.2
Đã biên dịch ra binary hoàn tất, chỉ đem về và chạy
Compiled into binary, just download and run


