Local SOCKS proxy
socks5h://127.0.0.1:1080:
Transparent proxy variant
Transparent egress requires root networking privileges inside the guest and is best kept to dedicated templates. Usess-redir and explicit iptables rules:
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Route machine egress through a Shadowsocks proxy with template primitives.
from nullspace import Machine, Template, wait_for_port
builder = (
Template.from_ubuntu_image("22.04")
.apt_install(["shadowsocks-libev", "curl", "ca-certificates"])
.set_runtime_envs(
Machine.enable_tunnel(
"proxy.example.com",
"change-me",
port=8388,
method="aes-256-gcm",
mode="socks5",
)
)
.set_start_cmd(
"ss-local -s $SS_SERVER -p $SS_SERVER_PORT "
"-k $SS_PASSWORD -m $SS_METHOD -b 127.0.0.1 -l 1080",
readiness=wait_for_port(1080),
)
)
socks5h://127.0.0.1:1080:
machine = Machine.create(template="my-proxy-template")
try:
result = machine.commands.run(
"curl --socks5-hostname 127.0.0.1:1080 https://ifconfig.me",
shell=True,
)
print(result.stdout.strip())
finally:
machine.kill()
ss-redir and explicit iptables rules:
builder = (
Template.from_ubuntu_image("22.04")
.apt_install(["shadowsocks-libev", "iptables", "ca-certificates"])
.set_runtime_envs(Machine.enable_tunnel("proxy.example.com", "change-me"))
.set_start_cmd(
"ss-redir -s $SS_SERVER -p $SS_SERVER_PORT -k $SS_PASSWORD "
"-m $SS_METHOD -b 127.0.0.1 -l 1081 & "
"iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner root "
"-j REDIRECT --to-ports 1081 && tail -f /dev/null"
)
)