neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Simply put, NetProxy is a genuinely full-featured reverse-proxy for Windows and Linux. On the short list, provides TCP, UDP, HTTP, HTTPS, TLS termination, load balancing, failover, sticky sessions, HTTP header manipulation, and more.
📖 Read the NetProxy guide for what NetProxy can do, common use cases and step-by-step configuration recipes.
👀 If you like NetProxy, you may also be interested in NetTunnel, it has a some similar features but is designed to tunnel traffic through a single TCP connection allowing ingress without opening ports on the firewall.
There are more screenshots at the bottom of this page.
A proxy listens on a port and passes every connection it accepts to one of its endpoints: the machines it is proxying to. Each endpoint has its own address and port, and its own traffic type. A proxy has:
| Setting | |
|---|---|
| Traffic type | What the listener accepts: TCP (any TCP protocol), HTTP, HTTPS (the proxy terminates TLS with the certificate you give it), or UDP. |
| Bindings | Listen on all addresses (IPv4, IPv6 or both), or only on the addresses you list. |
| Endpoints | Where connections go. Each endpoint is TCP, HTTP or HTTPS (UDP proxies relay to UDP endpoints), and can be switched off without deleting it. |
| Connection pattern | Fail-over (the first endpoint that works, in the order listed), Round-robin, or Balanced (the endpoint with the fewest connections). |
| Sticky sessions | Send a client back to the endpoint it used before, until the session cache expiration (since it was last used) passes. |
| HTTP header rules | Insert, update, upsert or delete request and response headers in flight (HTTP, and HTTPS where the proxy terminates TLS). |
NpServiceClient.Browse.win-acme (wacs.exe) can make the PFX file that NetProxy needs, without IIS. One command makes a wildcard certificate and writes it to a folder:
wacs.exe --accepttos --emailaddress [email protected] --target manual --host *.YOURDOMAIN.com --validation manual --store centralssl --centralsslstore C:\YOUR_NEW_CERT_PATH --pfxpassword "YOUR_NEW_PASSWORD" --installation none
--target manual --host *.YOURDOMAIN.com asks for a wildcard certificate. Use several names (--host *.YOURDOMAIN.com,YOURDOMAIN.com) if you also want the root domain on the same certificate: a wildcard does not cover the root domain, so without it YOURDOMAIN.com itself is not covered (see Sharing a port).--validation manual is how Let's Encrypt checks that you own the domain. A wildcard can only be validated with a DNS record, so win-acme prints a _acme-challenge.YOURDOMAIN.com TXT record for you to create at your DNS provider. Create it, wait for it to be visible, then press Enter. Because you create the record by hand, this certificate does not renew by itself: run the command (or Run renewal in the win-acme menu) again before it expires, about every 60 days, and create the new record when asked. To renew unattended, use a win-acme DNS validation plugin for your DNS provider instead.--store centralssl --centralsslstore C:\YOUR_NEW_CERT_PATH --pfxpassword "..." writes the certificate as a PFX file in that folder, protected by that password, and --installation none skips installing it anywhere (no IIS needed). The file is named after the host, with the * of a wildcard replaced by _ (for example _.YOURDOMAIN.com.pfx).To see or stop renewals that you no longer need, run wacs.exe, choose A: Manage renewals, type the number of the one renewal (for example 13) so that only it is selected, and choose C: Cancel renewal. Do not use Cancel while all renewals are selected. This only stops future renewals: it does not delete the PFX file or revoke the certificate.
Choose the UDP traffic type to relay datagrams. UDP has no connections, so the proxy keeps a session for each client (address and port): the first datagram creates it, it gets a socket of its own to its endpoint (so what the endpoint answers can be told from the answers to other clients), and it ends when the client has sent nothing for the idle timeout.
0 means 60 seconds, because a UDP session has no end of its own. Use a few seconds for DNS and minutes for a VPN or a game.An endpoint sees the connection come from the proxy. Set X-Forwarded-For / -Proto on the HTTP Headers tab of an HTTP or HTTPS proxy to pass the client on:
X-Forwarded-For is the address of the client and X-Forwarded-Proto is http or https (what the client used to reach the proxy). What the client sent for these is dropped, because anybody can send them.X-Forwarded-For, and X-Forwarded-Proto is kept if it is there."ForwardedHeaders": "Off" | "Replace" | "Append".Several HTTP or HTTPS proxies can listen on the same port, if each answers to different host names (the Host names tab of the proxy).
www.example.com) or a wildcard for everything below a domain (*.example.com). A wildcard does not cover the root domain: *.example.com matches www.example.com and a.b.example.com, but not example.com itself, so add example.com as its own host name (and, for HTTPS, give it a certificate that covers it; a wildcard certificate for *.example.com does not cover the root domain either unless it lists example.com as well). The most specific match wins: an exact name before a wildcard, a longer wildcard before a shorter one.*.example.com and example.com and forwards to SERVER1. Proxy B has the host name test.example.com and forwards to SERVER2. Both listen on the same port and are both HTTP or both HTTPS. test.example.com goes to B, because an exact name beats a wildcard; every other name under example.com, and example.com itself, goes to A. *.example.com also matches deeper names such as a.test.example.com; to send those to B as well, add *.test.example.com to B, which wins because it is the longer wildcard. For HTTPS, B needs a certificate that covers test.example.com: a *.example.com wildcard certificate does, so B's host name can use the same PFX file and password as A.Host header for HTTP, or the server name (SNI) of the TLS handshake for HTTPS.404, and an unknown HTTPS server name fails the handshake.www.example.com and another for example.com. A host name without one uses the certificate of the proxy. Proxies that share a port must all be HTTP or all be HTTPS.netproxyctl)netproxyctl is a cross-platform command line tool (Windows, Linux, macOS) that does what the console does, over the same encrypted management connection, so it works against a remote service too. NetProxy.ClientApi is the library underneath it, if you want to do the same from your own .NET code.
netproxyctl login --server myhost --user administrator # asks for the password
netproxyctl status
netproxyctl proxy list
netproxyctl proxy get web > web.json # edit it...
netproxyctl proxy apply -f web.json --dry-run # ...see what would change...
netproxyctl proxy apply -f web.json # ...and apply it
netproxyctl proxy restart web
netproxyctl user add bob --password-stdin
netproxyctl help # everything else
login keeps the server, user and the hash of the password (not the password) in ~/.netproxy/credentials.json for the user that ran it; on Linux and macOS only that user can read the file. NETPROXY_SERVER, NETPROXY_PORT, NETPROXY_USER and NETPROXY_PASSWORD, or --server, --port, --user and --password, take precedence, which is how scripts log in.proxy apply and plugin apply add the proxy or plugin, or replace the one with the same name (not case sensitive), the way kubectl apply does. One that is the same as what the service has is left alone, so it is not restarted. A file can hold one proxy, a list, or an export. In proxy get secrets are shown as ********, and applying that keeps the secret the proxy has.netproxyctl validate to check them and see what would change, then netproxyctl reload (or kill -HUP the service on Linux and macOS). Reload applies only what changed: proxies you did not touch keep running and keep their connections, and nothing is changed if the files have a problem (including a file with no proxies, which is what a file that could not be read looks like). Plain text passwords you typed into the files are encrypted the next time the service saves. The management port only changes when the service restarts. Do not edit the files while a console is changing the same things: the service rewrites them on every change.--json prints JSON, and the exit code is 0 when it was done, 1 when it was not, 2 for a wrong command line and 3 when it could not connect or log in. export and import move the proxies, plugins and settings between services (users are not included).netproxyctl proxy clear-stats <name>) sets one proxy back to zero.reload, logs, cert (list, get, apply and remove certificates) and certs (when they expire), stats, connections (and connections close), , , .NetProxy can be extended with .NET plugins. A plugin is an assembly with a class that derives from NpPlugin (the NetProxy.PluginApi project, which has no dependencies). NetProxy.SamplePlugin is a small working example: it logs connections, can block clients, and can find and replace text in the traffic.
name=value lines, a time limit per event), and put them in the order they are called in. A proxy then opts in on its Plugins tab: a proxy uses no plugins unless it ticks them.NpPlugin, mark the class with [NpPlugin("Name")], and override the events you want. Events you do not override cost nothing. Add the NetProxy.PluginApi NuGet package to a class library (dotnet add package NetProxy.PluginApi): you do not need the source of NetProxy. The package has no dependencies, and it leaves the API assembly out of your build output by itself, because the service supplies it (a second copy would be a different set of types). Use the same major version as the service. Inside this repository the sample plugin references the project instead (with Private=false). Plugins are loaded in their own load context, so a new build can be loaded with Reload without restarting the service.OnServiceStarting, OnServiceStopping, OnTick (when TickInterval is set), OnManagementLogin, OnError.OnProxyStarting (can say no), OnProxyStarted, OnProxyStartFailed, OnProxyStopping, OnProxyStopped, OnProxyConfigurationChanged.OnConnectionRefused, OnClientTlsEstablished, OnConnecting (can say no), OnEndpointsOrdering (change the order the endpoints are tried in), OnEndpointConnecting (can say no, and the next endpoint is tried), OnEndpointConnected, OnEndpointConnectFailed, OnEndpointsUnavailable (answer the client when no endpoint works, with Respond), OnConnected, OnIdleTimeout, OnDisconnecting, OnDisconnected.OnDataReceived, OnDataSending and OnDataSent.Proxies listen on IPv4, IPv6, or both (one dual-stack listener) when they listen on all addresses, and a binding can be an IPv4 or IPv6 address (::1 or [::1]). An endpoint can be an IPv6 address or a host name that has one. The management port accepts IPv6 too (Settings > Configuration > Service). Check the firewall for both IP versions: IPv6 addresses are often directly reachable from the internet.
Tick Allow HTTP/2 on the General tab to offer HTTP/2 to clients; gRPC is HTTP/2, so this is also what gRPC needs. The HTTP header rules apply to HTTP/2 requests and responses too (names are lower case in HTTP/2, a rule for Host changes :authority, and the connection specific headers such as Connection cannot be added). Without header rules the data is passed through untouched.
Upgrade: h2c request is not supported.On the Advanced tab of a proxy (0 is no limit, which is how existing proxies behave):
A connection over a limit is closed as soon as it is accepted. The service logs a warning when that starts, and then at most once a minute.
The service writes to a rolling log file (Logs/NetProxy.log in its installation folder by default, rolled over at a size you choose), to the Windows event log (warnings and exceptions), and to the console when it is run by hand. The level, the file and the roll-over can be changed in Settings > Configuration > Service and take effect immediately.
The configuration is stored in the common application data folder: C:\ProgramData\NetProxy on Windows, /usr/share/NetProxy on Linux (see the Linux install notes in @Installers). The NETPROXY_CONFIG_NAME environment variable names a different folder, so a test instance does not touch the real configuration.
Backup and restore: File, Export configuration... saves everything the service is set up with (proxies, certificates, plugins, users and settings) to a file on the machine of the console, and File, Import configuration... puts such a file in place of the current configuration. The file is checked first and nothing is changed if it is not good; then all of the proxies are stopped, the configuration is replaced, and the proxies that are set to start automatically are started. A copy of what was replaced is written to the Backups folder next to the configuration, so an import can be undone by importing that copy. The file holds the passwords of the certificates and the password hashes of the users: keep it private.
administrator, with an empty password. Set a password first. The service logs a warning while any user has none.user ...plugin ...settings ...ReceivedEncryptedWillBeSentEncryptedOnDataReceivedOnDataSendingReplaceDropCloseConnectionOnDataReceivedRespond(bytes, closeConnection)CanRespondOnDataReceived and OnDataSending get whole datagrams: a datagram is a message, unlike a read. Nothing is encrypted by the proxy, so ReceivedEncrypted and WillBeSentEncrypted are false.