fix: udp2raw require host network now

This commit is contained in:
Kirigaya Kazuto 2022-02-06 01:18:43 +00:00
parent 50ff7c041b
commit e248bb34d7

View File

@ -30,6 +30,7 @@ class Parser:
# flags # flags
self.flag_is_route_forward = False self.flag_is_route_forward = False
self.flag_is_route_lookup = False self.flag_is_route_lookup = False
self.flag_container_must_host = False
# vars # vars
self.wg_name = '%i' self.wg_name = '%i'
@ -42,7 +43,10 @@ class Parser:
self.podman_user = '' self.podman_user = ''
def get_container_network_name(self): def get_container_network_name(self):
return "wgop-net-{}".format(self.wg_name) if self.flag_container_must_host:
return "host"
else:
return "wgop-net-{}".format(self.wg_name)
def get_container_name(self): def get_container_name(self):
return "wgop-runner-{}".format(self.wg_name) return "wgop-runner-{}".format(self.wg_name)
@ -222,8 +226,12 @@ class Parser:
tunnel_port = parts[1] tunnel_port = parts[1]
tunnel_passwd = parts[2] tunnel_passwd = parts[2]
if self.podman_user:
sys.stderr.write('[Error] udp2raw tunnel need root as podman user, got {}\n'.format(self.podman_user))
exit(1)
self.add_udp2raw_server(tunnel_port, tunnel_passwd) self.add_udp2raw_server(tunnel_port, tunnel_passwd)
self.add_expose(tunnel_port) self.flag_container_must_host = True
elif line.startswith('#udp2raw-client '): elif line.startswith('#udp2raw-client '):
parts = line.split(' ')[1:] parts = line.split(' ')[1:]
tunnel_name = parts[0] tunnel_name = parts[0]
@ -231,8 +239,13 @@ class Parser:
tunnel_remote = parts[2] tunnel_remote = parts[2]
tunnel_passwd = parts[3] tunnel_passwd = parts[3]
self.idx_tunnels[tunnel_name] = "gateway:{}".format(tunnel_port) if self.podman_user:
sys.stderr.write('[Error] udp2raw tunnel need root as podman user, got {}\n'.format(self.podman_user))
exit(1)
self.idx_tunnels[tunnel_name] = "127.0.0.1:{}".format(tunnel_port)
self.add_udp2raw_client(tunnel_port, tunnel_passwd, tunnel_remote) self.add_udp2raw_client(tunnel_port, tunnel_passwd, tunnel_remote)
self.flag_container_must_host = True
elif line.startswith('#udp2raw-client-mux '): elif line.startswith('#udp2raw-client-mux '):
parts = line.split(' ')[1:] parts = line.split(' ')[1:]
tunnel_name = parts[0] tunnel_name = parts[0]
@ -241,7 +254,12 @@ class Parser:
tunnel_remote = parts[3] tunnel_remote = parts[3]
tunnel_passwd = parts[4] tunnel_passwd = parts[4]
self.idx_tunnels[tunnel_name] = "gateway:{}".format(tunnel_port) if self.podman_user:
sys.stderr.write('[Error] udp2raw tunnel need root as podman user, got {}\n'.format(self.podman_user))
exit(1)
self.idx_tunnels[tunnel_name] = "127.0.0.1:{}".format(tunnel_port)
self.flag_container_must_host = True
self.add_muxer(tunnel_port, tunnel_port+1, tunnel_mux) self.add_muxer(tunnel_port, tunnel_port+1, tunnel_mux)
for mux_idx in range(tunnel_mux): for mux_idx in range(tunnel_mux):
self.add_udp2raw_client(tunnel_port + 1 + mux_idx, tunnel_passwd, tunnel_remote) self.add_udp2raw_client(tunnel_port + 1 + mux_idx, tunnel_passwd, tunnel_remote)
@ -335,10 +353,12 @@ class Parser:
self.result_container_prebootstrap.append('PostUp=rm {}'.format(tmp_filepath)) self.result_container_prebootstrap.append('PostUp=rm {}'.format(tmp_filepath))
if self.result_container_prebootstrap or self.result_container_postbootstrap: if self.result_container_prebootstrap or self.result_container_postbootstrap:
self.result_postup.append('PostUp={}'.format( if not self.flag_container_must_host:
self.get_podman_cmd_with('podman network create {}'.format(self.get_container_network_name())) self.result_postup.append('PostUp={}'.format(
)) self.get_podman_cmd_with('podman network create {}'.format(self.get_container_network_name()))
if self.container_expose_port: ))
if not self.flag_container_must_host and self.container_expose_port:
cmd_ports = ["-p {}:{}/{}".format(this_port['port'], this_port['port'], this_port['mode']) for this_port in self.container_expose_port] cmd_ports = ["-p {}:{}/{}".format(this_port['port'], this_port['port'], this_port['mode']) for this_port in self.container_expose_port]
cmd_ports = ' '.join(cmd_ports) cmd_ports = ' '.join(cmd_ports)
else: else:
@ -355,16 +375,24 @@ class Parser:
self.result_postdown.append('PostDown={}'.format( self.result_postdown.append('PostDown={}'.format(
self.get_podman_cmd_with('podman stop {}'.format(self.get_container_name())) self.get_podman_cmd_with('podman stop {}'.format(self.get_container_name()))
)) ))
self.result_postdown.append('PostDown={}'.format(
self.get_podman_cmd_with('podman network rm {}'.format(self.get_container_network_name())) if not self.flag_container_must_host:
)) self.result_postdown.append('PostDown={}'.format(
self.get_podman_cmd_with('podman network rm {}'.format(self.get_container_network_name()))
))
self.result_postup.extend(self.result_container_prebootstrap) self.result_postup.extend(self.result_container_prebootstrap)
self.result_postup.append('PostUp={}'.format( if not self.flag_container_must_host:
self.get_podman_cmd_with('CT_GATEWAY=$(/usr/bin/python3 {} {}); podman exec -t -e GATEWAY_IP=$CT_GATEWAY -e WG_PORT={} {} /usr/bin/python3 /root/app/bootstrap.py'.format( self.result_postup.append('PostUp={}'.format(
path_get_gateway, self.get_container_network_name(), self.wg_port, self.get_container_name())) self.get_podman_cmd_with('CT_GATEWAY=$(/usr/bin/python3 {} {}); podman exec -t -e GATEWAY_IP=$CT_GATEWAY -e WG_PORT={} {} /usr/bin/python3 /root/app/bootstrap.py'.format(
)) path_get_gateway, self.get_container_network_name(), self.wg_port, self.get_container_name()))
))
else:
self.result_postup.append('PostUp={}'.format(
self.get_podman_cmd_with('podman exec -t -e GATEWAY_IP=127.0.0.1 -e WG_PORT={} {} /usr/bin/python3 /root/app/bootstrap.py'.format(
self.wg_port, self.get_container_name()))
))
self.result_postup.extend(self.result_container_postbootstrap) self.result_postup.extend(self.result_container_postbootstrap)
@ -404,9 +432,13 @@ class Parser:
if addr_host == "gateway": if addr_host == "gateway":
tunnel_addr = "" tunnel_addr = ""
self.result_postup.append("PostUp=CT_GATEWAY=$({}); wg set {} peer {} endpoint $CT_GATEWAY:{}".format( if not self.flag_container_must_host:
self.get_podman_cmd_with('/usr/bin/python3 {} {}'.format(path_get_gateway, self.get_container_network_name())), self.result_postup.append("PostUp=CT_GATEWAY=$({}); wg set {} peer {} endpoint $CT_GATEWAY:{}".format(
self.wg_name, current_pubkey, addr_port)) self.get_podman_cmd_with('/usr/bin/python3 {} {}'.format(path_get_gateway, self.get_container_network_name())),
self.wg_name, current_pubkey, addr_port))
else:
self.result_postup.append("PostUp=wg set {} peer {} endpoint 127.0.0.1:{}".format(
self.wg_name, current_pubkey, addr_port))
elif tunnel_addr: elif tunnel_addr:
tunnel_addr = "127.0.0.1:{}".format(tunnel_addr) tunnel_addr = "127.0.0.1:{}".format(tunnel_addr)