mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-12 08:43:06 +00:00
e3e6e94010
Adds a module for rathole package. The package itself and this module is very similar to frp, so the options and tests are not very far off from those for frp.
90 lines
2.3 KiB
Nix
90 lines
2.3 KiB
Nix
import ./make-test-python.nix (
|
|
{ pkgs, lib, ... }:
|
|
|
|
let
|
|
successMessage = "Success 3333115147933743662";
|
|
in
|
|
{
|
|
name = "rathole";
|
|
meta.maintainers = with lib.maintainers; [ xokdvium ];
|
|
nodes = {
|
|
server = {
|
|
networking = {
|
|
useNetworkd = true;
|
|
useDHCP = false;
|
|
firewall.enable = false;
|
|
};
|
|
|
|
systemd.network.networks."01-eth1" = {
|
|
name = "eth1";
|
|
networkConfig.Address = "10.0.0.1/24";
|
|
};
|
|
|
|
services.rathole = {
|
|
enable = true;
|
|
role = "server";
|
|
settings = {
|
|
server = {
|
|
bind_addr = "0.0.0.0:2333";
|
|
services = {
|
|
success-message = {
|
|
bind_addr = "0.0.0.0:80";
|
|
token = "hunter2";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
client = {
|
|
networking = {
|
|
useNetworkd = true;
|
|
useDHCP = false;
|
|
};
|
|
|
|
systemd.network.networks."01-eth1" = {
|
|
name = "eth1";
|
|
networkConfig.Address = "10.0.0.2/24";
|
|
};
|
|
|
|
services.nginx = {
|
|
enable = true;
|
|
virtualHosts."127.0.0.1" = {
|
|
root = pkgs.writeTextDir "success-message.txt" successMessage;
|
|
};
|
|
};
|
|
|
|
services.rathole = {
|
|
enable = true;
|
|
role = "client";
|
|
credentialsFile = pkgs.writeText "rathole-credentials.toml" ''
|
|
[client.services.success-message]
|
|
token = "hunter2"
|
|
'';
|
|
settings = {
|
|
client = {
|
|
remote_addr = "10.0.0.1:2333";
|
|
services.success-message = {
|
|
local_addr = "127.0.0.1:80";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
start_all()
|
|
server.wait_for_unit("rathole.service")
|
|
server.wait_for_open_port(2333)
|
|
client.wait_for_unit("rathole.service")
|
|
server.wait_for_open_port(80)
|
|
response = server.succeed("curl http://127.0.0.1/success-message.txt")
|
|
assert "${successMessage}" in response, "Got invalid response"
|
|
response = client.succeed("curl http://10.0.0.1/success-message.txt")
|
|
assert "${successMessage}" in response, "Got invalid response"
|
|
'';
|
|
}
|
|
)
|