mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
otgnet forwarding
This commit is contained in:
parent
ecdc65ceb3
commit
70fb46d428
@ -511,6 +511,7 @@ def _get_config_scheme() -> Dict:
|
|||||||
"allow_icmp": Option(True, type=valid_bool),
|
"allow_icmp": Option(True, type=valid_bool),
|
||||||
"allow_tcp": Option([], type=valid_ports_list),
|
"allow_tcp": Option([], type=valid_ports_list),
|
||||||
"allow_udp": Option([67], type=valid_ports_list),
|
"allow_udp": Option([67], type=valid_ports_list),
|
||||||
|
"forward_iface": Option("", type=valid_stripped_string),
|
||||||
"iptables_cmd": Option(["/usr/bin/iptables"], type=valid_command),
|
"iptables_cmd": Option(["/usr/bin/iptables"], type=valid_command),
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -527,7 +528,7 @@ def _get_config_scheme() -> Dict:
|
|||||||
"--port=0",
|
"--port=0",
|
||||||
"--dhcp-range={dhcp_ip_begin},{dhcp_ip_end},24h",
|
"--dhcp-range={dhcp_ip_begin},{dhcp_ip_end},24h",
|
||||||
"--dhcp-leasefile=/run/kvmd/dnsmasq.lease",
|
"--dhcp-leasefile=/run/kvmd/dnsmasq.lease",
|
||||||
"--dhcp-option=3",
|
"--dhcp-option={dhcp_option_3}",
|
||||||
"--dhcp-option=6",
|
"--dhcp-option=6",
|
||||||
"--keep-in-foreground",
|
"--keep-in-foreground",
|
||||||
], type=valid_command),
|
], type=valid_command),
|
||||||
|
|||||||
@ -45,12 +45,14 @@ from .netctl import IfaceAddIpCtl
|
|||||||
from .netctl import IptablesDropAllCtl
|
from .netctl import IptablesDropAllCtl
|
||||||
from .netctl import IptablesAllowIcmpCtl
|
from .netctl import IptablesAllowIcmpCtl
|
||||||
from .netctl import IptablesAllowPortCtl
|
from .netctl import IptablesAllowPortCtl
|
||||||
|
from .netctl import IptablesForwardOut
|
||||||
|
from .netctl import IptablesForwardIn
|
||||||
from .netctl import CustomCtl
|
from .netctl import CustomCtl
|
||||||
|
|
||||||
|
|
||||||
# =====
|
# =====
|
||||||
@dataclasses.dataclass(frozen=True)
|
@dataclasses.dataclass(frozen=True)
|
||||||
class _Netcfg:
|
class _Netcfg: # pylint: disable=too-many-instance-attributes
|
||||||
iface: str
|
iface: str
|
||||||
iface_ip: str
|
iface_ip: str
|
||||||
net_ip: str
|
net_ip: str
|
||||||
@ -58,6 +60,7 @@ class _Netcfg:
|
|||||||
net_mask: str
|
net_mask: str
|
||||||
dhcp_ip_begin: str
|
dhcp_ip_begin: str
|
||||||
dhcp_ip_end: str
|
dhcp_ip_end: str
|
||||||
|
dhcp_option_3: str
|
||||||
|
|
||||||
|
|
||||||
class _Service: # pylint: disable=too-many-instance-attributes
|
class _Service: # pylint: disable=too-many-instance-attributes
|
||||||
@ -68,6 +71,7 @@ class _Service: # pylint: disable=too-many-instance-attributes
|
|||||||
self.__allow_icmp: bool = config.otgnet.firewall.allow_icmp
|
self.__allow_icmp: bool = config.otgnet.firewall.allow_icmp
|
||||||
self.__allow_tcp: List[int] = sorted(set(config.otgnet.firewall.allow_tcp))
|
self.__allow_tcp: List[int] = sorted(set(config.otgnet.firewall.allow_tcp))
|
||||||
self.__allow_udp: List[int] = sorted(set(config.otgnet.firewall.allow_udp))
|
self.__allow_udp: List[int] = sorted(set(config.otgnet.firewall.allow_udp))
|
||||||
|
self.__forward_iface: str = config.otgnet.firewall.forward_iface
|
||||||
self.__iptables_cmd: List[str] = config.otgnet.firewall.iptables_cmd
|
self.__iptables_cmd: List[str] = config.otgnet.firewall.iptables_cmd
|
||||||
|
|
||||||
self.__pre_start_cmd: List[str] = config.otgnet.commands.pre_start_cmd
|
self.__pre_start_cmd: List[str] = config.otgnet.commands.pre_start_cmd
|
||||||
@ -101,6 +105,8 @@ class _Service: # pylint: disable=too-many-instance-attributes
|
|||||||
*zip(self.__allow_udp, itertools.repeat(False)),
|
*zip(self.__allow_udp, itertools.repeat(False)),
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
*([IptablesForwardOut(self.__iptables_cmd, self.__forward_iface)] if self.__forward_iface else []),
|
||||||
|
*([IptablesForwardIn(self.__iptables_cmd, netcfg.iface)] if self.__forward_iface else []),
|
||||||
IptablesDropAllCtl(self.__iptables_cmd, netcfg.iface),
|
IptablesDropAllCtl(self.__iptables_cmd, netcfg.iface),
|
||||||
IfaceAddIpCtl(self.__ip_cmd, netcfg.iface, f"{netcfg.iface_ip}/{netcfg.net_prefix}"),
|
IfaceAddIpCtl(self.__ip_cmd, netcfg.iface, f"{netcfg.iface_ip}/{netcfg.net_prefix}"),
|
||||||
CustomCtl(self.__post_start_cmd, self.__pre_stop_cmd, placeholders),
|
CustomCtl(self.__post_start_cmd, self.__pre_stop_cmd, placeholders),
|
||||||
@ -152,6 +158,7 @@ class _Service: # pylint: disable=too-many-instance-attributes
|
|||||||
net_mask=str(net.netmask),
|
net_mask=str(net.netmask),
|
||||||
dhcp_ip_begin=dhcp_ip_begin,
|
dhcp_ip_begin=dhcp_ip_begin,
|
||||||
dhcp_ip_end=dhcp_ip_end,
|
dhcp_ip_end=dhcp_ip_end,
|
||||||
|
dhcp_option_3=(f"3,{iface_ip}" if self.__forward_iface else "3"),
|
||||||
)
|
)
|
||||||
logger.info("Calculated %r address is %s/%d", iface, iface_ip, netcfg.net_prefix)
|
logger.info("Calculated %r address is %s/%d", iface, iface_ip, netcfg.net_prefix)
|
||||||
return netcfg
|
return netcfg
|
||||||
|
|||||||
@ -85,6 +85,33 @@ class IptablesAllowPortCtl(BaseCtl):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class IptablesForwardOut(BaseCtl):
|
||||||
|
def __init__(self, base_cmd: List[str], iface: str) -> None:
|
||||||
|
self.__base_cmd = base_cmd
|
||||||
|
self.__iface = iface
|
||||||
|
|
||||||
|
def get_command(self, direct: bool) -> List[str]:
|
||||||
|
return [
|
||||||
|
*self.__base_cmd,
|
||||||
|
"--table", "nat",
|
||||||
|
("-A" if direct else "-D"), "POSTROUTING",
|
||||||
|
"-o", self.__iface, "-j", "MASQUERADE",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class IptablesForwardIn(BaseCtl):
|
||||||
|
def __init__(self, base_cmd: List[str], iface: str) -> None:
|
||||||
|
self.__base_cmd = base_cmd
|
||||||
|
self.__iface = iface
|
||||||
|
|
||||||
|
def get_command(self, direct: bool) -> List[str]:
|
||||||
|
return [
|
||||||
|
*self.__base_cmd,
|
||||||
|
("-A" if direct else "-D"), "FORWARD",
|
||||||
|
"-i", self.__iface, "-j", "ACCEPT",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class CustomCtl(BaseCtl):
|
class CustomCtl(BaseCtl):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@ -37,5 +37,6 @@ _SharedParams.height
|
|||||||
|
|
||||||
_Netcfg.net_ip
|
_Netcfg.net_ip
|
||||||
_Netcfg.net_mask
|
_Netcfg.net_mask
|
||||||
|
_Netcfg.dhcp_option_3
|
||||||
|
|
||||||
_ScriptWriter.get_args
|
_ScriptWriter.get_args
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user