Skip to content

Commit 1783c71

Browse files
committed
refactor(client): migrate wireguard to endpoints
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
1 parent 6d520ef commit 1783c71

File tree

3 files changed

+85
-28
lines changed

3 files changed

+85
-28
lines changed

htdocs/luci-static/resources/view/homeproxy/node.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -845,12 +845,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
845845
/* Transport config end */
846846

847847
/* Wireguard config start */
848-
o = s.option(form.Flag, 'wireguard_gso', _('Generic segmentation offload'));
849-
o.default = o.disabled;
850-
o.depends('type', 'wireguard');
851-
o.rmempty = false;
852-
o.modalonly = true;
853-
854848
o = s.option(form.DynamicList, 'wireguard_local_address', _('Local address'),
855849
_('List of IP (v4 or v6) addresses prefixes to be assigned to the interface.'));
856850
o.datatype = 'cidr';
@@ -890,6 +884,12 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
890884
o.placeholder = '1408';
891885
o.depends('type', 'wireguard');
892886
o.modalonly = true;
887+
888+
o = s.option(form.Value, 'wireguard_persistent_keepalive_interval', _('Persistent keepalive interval'),
889+
_('In seconds. Disabled by default.'));
890+
o.datatype = 'uinteger';
891+
o.depends('type', 'wireguard');
892+
o.modalonly = true;
893893
/* Wireguard config end */
894894

895895
/* Mux config start */

root/etc/homeproxy/scripts/generate_client.uc

+75-22
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,36 @@ function parse_dnsquery(strquery) {
153153

154154
}
155155

156+
function generate_endpoint(node) {
157+
if (type(node) !== 'object' || isEmpty(node))
158+
return null;
159+
160+
const endpoint = {
161+
type: node.type,
162+
tag: 'cfg-' + node['.name'] + '-out',
163+
address: node.wireguard_local_address,
164+
mtu: strToInt(node.wireguard_mtu),
165+
private_key: node.wireguard_private_key,
166+
peers: (node.type === 'wireguard') ? [
167+
{
168+
address: node.address,
169+
port: strToInt(node.port),
170+
allowed_ips: [
171+
'0.0.0.0/0',
172+
'::/0'
173+
],
174+
persistent_keepalive_interval: strToInt(node.wireguard_persistent_keepalive_interval),
175+
public_key: node.wireguard_peer_public_key,
176+
pre_shared_key: node.wireguard_pre_shared_key,
177+
reserved: parse_port(node.wireguard_reserved),
178+
}
179+
] : null,
180+
system: (node.type === 'wireguard') ? false : null,
181+
};
182+
183+
return endpoint;
184+
}
185+
156186
function generate_outbound(node) {
157187
if (type(node) !== 'object' || isEmpty(node))
158188
return null;
@@ -214,14 +244,6 @@ function generate_outbound(node) {
214244
global_padding: node.vmess_global_padding ? (node.vmess_global_padding === '1') : null,
215245
authenticated_length: node.vmess_authenticated_length ? (node.vmess_authenticated_length === '1') : null,
216246
packet_encoding: node.packet_encoding,
217-
/* WireGuard */
218-
gso: (node.wireguard_gso === '1') || null,
219-
local_address: node.wireguard_local_address,
220-
private_key: node.wireguard_private_key,
221-
peer_public_key: node.wireguard_peer_public_key,
222-
pre_shared_key: node.wireguard_pre_shared_key,
223-
reserved: parse_port(node.wireguard_reserved),
224-
mtu: strToInt(node.wireguard_mtu),
225247

226248
multiplex: (node.multiplex === '1') ? {
227249
enabled: true,
@@ -573,6 +595,8 @@ if (match(proxy_mode, /tun/))
573595
/* Inbound end */
574596

575597
/* Outbound start */
598+
config.endpoints = [];
599+
576600
/* Default outbounds */
577601
config.outbounds = [
578602
{
@@ -602,9 +626,14 @@ if (!isEmpty(main_node)) {
602626
urltest_nodes = main_urltest_nodes;
603627
} else {
604628
const main_node_cfg = uci.get_all(uciconfig, main_node) || {};
605-
push(config.outbounds, generate_outbound(main_node_cfg));
606-
config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null;
607-
config.outbounds[length(config.outbounds)-1].tag = 'main-out';
629+
if (main_node_cfg.type === 'wireguard') {
630+
push(config.endpoints, generate_endpoint(main_node_cfg));
631+
config.endpoints[length(config.endpoints)-1].tag = 'main-out';
632+
} else {
633+
push(config.outbounds, generate_outbound(main_node_cfg));
634+
config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null;
635+
config.outbounds[length(config.outbounds)-1].tag = 'main-out';
636+
}
608637
}
609638

610639
if (main_udp_node === 'urltest') {
@@ -623,14 +652,26 @@ if (!isEmpty(main_node)) {
623652
urltest_nodes = [...urltest_nodes, ...filter(main_udp_urltest_nodes, (l) => !~index(urltest_nodes, l))];
624653
} else if (dedicated_udp_node) {
625654
const main_udp_node_cfg = uci.get_all(uciconfig, main_udp_node) || {};
626-
push(config.outbounds, generate_outbound(main_udp_node_cfg));
627-
config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null;
628-
config.outbounds[length(config.outbounds)-1].tag = 'main-udp-out';
655+
if (main_node_cfg.type === 'wireguard') {
656+
push(config.endpoints, generate_endpoint(main_udp_node_cfg));
657+
config.endpoints[length(config.endpoints)-1].tag = 'main-udp-out';
658+
} else {
659+
push(config.outbounds, generate_outbound(main_udp_node_cfg));
660+
config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null;
661+
config.outbounds[length(config.outbounds)-1].tag = 'main-udp-out';
662+
}
629663
}
630664

631665
for (let i in urltest_nodes) {
632-
push(config.outbounds, generate_outbound(uci.get_all(uciconfig, i)));
633-
config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null;
666+
const urltest_node = uci.get_all(uciconfig, i) || {};
667+
if (urltest_node.type === 'wireguard') {
668+
push(config.endpoints, generate_endpoint(urltest_node));
669+
config.endpoints[length(config.endpoints)-1].tag = 'cfg-' + i + '-out';
670+
} else {
671+
push(config.outbounds, generate_outbound(urltest_node));
672+
config.outbounds[length(config.outbounds)-1].domain_strategy = (ipv6_support !== '1') ? 'prefer_ipv4' : null;
673+
config.outbounds[length(config.outbounds)-1].tag = 'cfg-' + i + '-out';
674+
}
634675
}
635676
} else if (!isEmpty(default_outbound)) {
636677
let urltest_nodes = [],
@@ -654,17 +695,29 @@ if (!isEmpty(main_node)) {
654695
urltest_nodes = [...urltest_nodes, ...filter(cfg.urltest_nodes, (l) => !~index(urltest_nodes, l))];
655696
} else {
656697
const outbound = uci.get_all(uciconfig, cfg.node) || {};
657-
push(config.outbounds, generate_outbound(outbound));
658-
config.outbounds[length(config.outbounds)-1].domain_strategy = cfg.domain_strategy;
659-
config.outbounds[length(config.outbounds)-1].bind_interface = cfg.bind_interface;
660-
config.outbounds[length(config.outbounds)-1].detour = get_outbound(cfg.outbound);
698+
if (outbound.type === 'wireguard') {
699+
push(config.endpoints, generate_endpoint(outbound));
700+
} else {
701+
push(config.outbounds, generate_outbound(outbound));
702+
config.outbounds[length(config.outbounds)-1].domain_strategy = cfg.domain_strategy;
703+
config.outbounds[length(config.outbounds)-1].bind_interface = cfg.bind_interface;
704+
config.outbounds[length(config.outbounds)-1].detour = get_outbound(cfg.outbound);
705+
}
661706
push(routing_nodes, cfg.node);
662707
}
663708
});
664709

665-
for (let i in filter(urltest_nodes, (l) => !~index(routing_nodes, l)))
666-
push(config.outbounds, generate_outbound(uci.get_all(uciconfig, i)));
710+
for (let i in filter(urltest_nodes, (l) => !~index(routing_nodes, l))) {
711+
const urltest_node = uci.get_all(uciconfig, i) || {};
712+
if (urltest_node.type === 'wireguard')
713+
push(config.endpoints, generate_endpoint(urltest_node));
714+
else
715+
push(config.outbounds, generate_outbound(urltest_node));
716+
}
667717
}
718+
719+
if (isEmpty(config.endpoints))
720+
config.endpoints = null;
668721
/* Outbound end */
669722

670723
/* Routing rules start */

root/etc/homeproxy/scripts/migrate_config.uc

+4
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ uci.foreach(uciconfig, ucinode, (cfg) => {
6767
/* tls_ech_tls_disable_drs is useless and deprecated in sb 1.12 */
6868
if (!isEmpty(cfg.tls_ech_tls_disable_drs))
6969
uci.delete(uciconfig, cfg, 'tls_ech_tls_disable_drs');
70+
71+
/* wireguard_gso was deprecated in sb 1.11 */
72+
if (!isEmpty(cfg.wireguard_gso))
73+
uci.delete(uciconfig, cfg, 'wireguard_gso');
7074
});
7175

7276
/* routing rules options */

0 commit comments

Comments
 (0)