mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-06 11:24:07 +08:00
🏅 Sync 2026-10-30 20:56:14
This commit is contained in:
1 parent
f470897df5
commit
2d2368945f
32 files changed
+2793
-2828
No files matched your search
+2
-2
@@ -5,8 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gately
|
||||
PKG_VERSION:=0.6.1
|
||||
PKG_RELEASE:=18
|
||||
PKG_VERSION:=0.6.1.1
|
||||
PKG_RELEASE:=19
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/wangwanjie/gately/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=headscale
|
||||
PKG_VERSION:=0.29.6
|
||||
PKG_RELEASE:=11
|
||||
PKG_VERSION:=0.29.7
|
||||
PKG_RELEASE:=12
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/juanfont/headscale/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
@@ -110,9 +110,30 @@ return dm2.dv.extend({
|
||||
isLocal = true;
|
||||
|
||||
if (info_response?.code !== 200) {
|
||||
return E('div', {}, [ info_response?.body?.message ]);
|
||||
return E('div', { 'class': 'cbi-section' }, [
|
||||
E('h3', {}, _('Docker Daemon Status')),
|
||||
E('div', { 'class': 'alert-message warning', style: 'margin-bottom: 15px;' },
|
||||
info_response?.body?.message || _('Failed to connect to Docker daemon.')
|
||||
),
|
||||
E('p', {}, _('The Docker daemon appears to be stopped. You can attempt to start it below:')),
|
||||
E('div', { style: 'display: flex; gap: 5px; flex-wrap: wrap; margin-top: 10px;' }, [
|
||||
E('button', {
|
||||
'class': 'btn cbi-button-action positive',
|
||||
'click': () => {
|
||||
this.handleAction('dockerd', 'start').then((success) => {
|
||||
if (success) {
|
||||
setTimeout(() => location.reload(), 1500);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, [_('Start')]),
|
||||
E('button', {
|
||||
'class': 'btn cbi-button-action neutral',
|
||||
'click': () => location.reload()
|
||||
}, [_('Refresh')])
|
||||
])
|
||||
]);
|
||||
}
|
||||
|
||||
this.parseHeaders(version_response.headers, version_headers);
|
||||
this.parseBody(version_response.body, version_body);
|
||||
this.parseBody(info_response.body, info_body);
|
||||
|
||||
@@ -1420,6 +1420,84 @@ function getDashURL(isRunning) {
|
||||
String.format(dashrepos_urlparams[repo] || '', host, port, secret)
|
||||
}
|
||||
|
||||
function renderHy2Realm(s, uciconfig) {
|
||||
let o;
|
||||
|
||||
o = s.taboption('field_general', form.Flag, 'hysteria2_realm', _('Realm'));
|
||||
o.default = o.disabled;
|
||||
o.depends('type', 'hysteria2');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_server_url', _('Rendezvous server'));
|
||||
o.placeholder = 'https://realm.hy2.io';
|
||||
o.rmempty = false;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_token', _('Pre-shared key of rendezvous server'));
|
||||
o.placeholder = 'public';
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_id', _('Realm ID'));
|
||||
o.placeholder = 'my-cabin-1f3a8c2e9b';
|
||||
o.rmempty = false;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.DynamicList, 'hysteria2_realm_stun_servers', _('STUN servers'));
|
||||
o.datatype = 'hostport';
|
||||
o.default = ['stun.nextcloud.com:3478','stun.sip.us:3478','global.stun.twilio.com:3478'];
|
||||
o.rmempty = false;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
// @ 下面支持填写针对server-url的TLS配置(sni, skip-cert-verify, name-cert-verify, fingerprint, certificate, private-key, alpn)
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_sni', _('TLS SNI'),
|
||||
_('Hostname that the client attempts to connect to at the start of the TLS handshake process.'));
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.DynamicList, 'hysteria2_realm_alpn', _('TLS ALPN'),
|
||||
_('List of supported application level protocols, in order of preference.'));
|
||||
o.default = ['h2', 'http/1.1'];
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_fingerprint', _('Cert fingerprint'),
|
||||
_('Certificate fingerprint. Used to implement SSL Pinning and prevent MitM.'));
|
||||
o.validate = validateSha256Key || hm.validateSha256Key;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_name_cert_verify', _('Override cert DNSName'),
|
||||
_('Used to verify the hostname on the returned certificates.'));
|
||||
o.datatype = 'hostname';
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Flag, 'hysteria2_realm_skip_cert_verify', _('Skip cert verify'),
|
||||
_('Donot verifying server certificate.') +
|
||||
'<br/>' +
|
||||
_('This is <strong>DANGEROUS</strong>, your traffic is almost like <strong>PLAIN TEXT</strong>! Use at your own risk!'));
|
||||
o.default = o.disabled;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_cert_path', _('Certificate path') + _(' (mTLS)'),
|
||||
_('The %s public key, in PEM format.').format(_('Client')));
|
||||
o.value('/etc/fchomo/certs/client_publickey.pem');
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_key_path', _('Key path') + _(' (mTLS)'),
|
||||
_('The %s private key, in PEM format.').format(_('Client')));
|
||||
o.value('/etc/fchomo/certs/client_privatekey.pem');
|
||||
o.depends({hysteria2_realm: '1', hysteria2_realm_cert_path: /.+/});
|
||||
o.modalonly = true;
|
||||
}
|
||||
|
||||
function renderResDownload(section_id) {
|
||||
const section_type = this.section.sectiontype;
|
||||
const type = uci.get(this.config, section_id, 'type');
|
||||
@@ -1738,6 +1816,14 @@ function validateBase64Key(length, section_id, value) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function validateSha256Key(section_id, value) {
|
||||
if (!value)
|
||||
return true;
|
||||
if (!((value.length === 64) && (value.match(/^[0-9a-fA-F]+$/))))
|
||||
return _('Expecting: %s').format(_('valid SHA256 string with %d characters').format(64));
|
||||
return true;
|
||||
}
|
||||
|
||||
function validateMTLSClientAuth(type_option, section_id, value) {
|
||||
// If `client-auth-type` is set to "verify-if-given" or "require-and-verify", `client-auth-cert` must not be empty.
|
||||
const auth_type = this.section.getOption(type_option).formvalue(section_id);
|
||||
@@ -2021,6 +2107,7 @@ return baseclass.extend({
|
||||
renderStatus,
|
||||
updateStatus,
|
||||
getDashURL,
|
||||
renderHy2Realm,
|
||||
renderResDownload,
|
||||
renderResLink,
|
||||
handleGenKey,
|
||||
@@ -2037,9 +2124,9 @@ return baseclass.extend({
|
||||
validateJson,
|
||||
validateUUID,
|
||||
validateUrl,
|
||||
// validate with bind this
|
||||
validateHexstr,
|
||||
validateBase64Key,
|
||||
validateSha256Key,
|
||||
validateMTLSClientAuth,
|
||||
validatePresetIDs,
|
||||
validateShadowsocksPassword,
|
||||
|
||||
@@ -204,7 +204,7 @@ function renderListeners(s, uciconfig, isClient) {
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_general', form.Value, 'mieru_tcp_idle_timeout', _('TCP idle timeout'),
|
||||
_('In seconds.'), _('Minimum value is $s.').format('60'));
|
||||
_('In seconds.') + ' ' + _('Minimum value is $s.').format('60'));
|
||||
o.placeholder = '1800';
|
||||
o.validate = hm.validateTimeDuration;
|
||||
o.depends('type', 'mieru');
|
||||
@@ -1003,36 +1003,24 @@ function renderListeners(s, uciconfig, isClient) {
|
||||
// @xhttp-config其他的配置
|
||||
|
||||
/* Hysteria2 Realm fields */
|
||||
o = s.taboption('field_general', form.Flag, 'hysteria2_realm', _('Realm'));
|
||||
o.default = o.disabled;
|
||||
o.depends('type', 'hysteria2');
|
||||
o.modalonly = true;
|
||||
hm.renderHy2Realm(s, uciconfig);
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_server_url', _('Rendezvous server'));
|
||||
o.placeholder = 'https://realm.hy2.io';
|
||||
o.rmempty = false;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_token', _('Pre-shared key of rendezvous server'));
|
||||
o.placeholder = 'public';
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_id', _('Realm ID'));
|
||||
o.placeholder = 'my-cabin-1f3a8c2e9b';
|
||||
o.rmempty = false;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
o = s.taboption('field_hysteria2_realm', form.DynamicList, 'hysteria2_realm_stun_servers', _('STUN servers'));
|
||||
o.datatype = 'hostport';
|
||||
o.default = ['stun.nextcloud.com:3478','stun.sip.us:3478','global.stun.twilio.com:3478'];
|
||||
o.rmempty = false;
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
|
||||
// @ 下面支持填写针对server-url的TLS配置(sni, skip-cert-verify, name-cert-verify, fingerprint, certificate, private-key, alpn)
|
||||
if (isClient) {
|
||||
o = s.taboption('field_hysteria2_realm', form.ListValue, 'hysteria2_realm_proxy', _('Proxy group'),
|
||||
_('The proxy used to connect to the rendezvous server.'));
|
||||
o.default = hm.preset_outbound.direct[0][0];
|
||||
hm.preset_outbound.direct.forEach((res) => {
|
||||
o.value.apply(o, res);
|
||||
})
|
||||
o.load = function(section_id) {
|
||||
return hm.loadLabel.call(this, [
|
||||
...hm.preset_outbound.direct,
|
||||
...hm.loadLabelValues(this.config, 'proxy_group')
|
||||
], section_id);
|
||||
}
|
||||
o.depends('hysteria2_realm', '1');
|
||||
o.modalonly = true;
|
||||
}
|
||||
|
||||
/* TLS fields */
|
||||
o = s.taboption('field_general', form.Flag, 'tls', _('TLS'));
|
||||
|
||||
@@ -1423,36 +1423,7 @@ return view.extend({
|
||||
// @ 下面支持填写针对download-settings的上下行分离配置
|
||||
|
||||
/* Hysteria2 Realm fields */
|
||||
so = ss.taboption('field_general', form.Flag, 'hysteria2_realm', _('Realm'));
|
||||
so.default = so.disabled;
|
||||
so.depends('type', 'hysteria2');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_server_url', _('Rendezvous server'));
|
||||
so.placeholder = 'https://realm.hy2.io';
|
||||
so.rmempty = false;
|
||||
so.depends('hysteria2_realm', '1');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_token', _('Pre-shared key of rendezvous server'));
|
||||
so.placeholder = 'public';
|
||||
so.depends('hysteria2_realm', '1');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_hysteria2_realm', form.Value, 'hysteria2_realm_id', _('Realm ID'));
|
||||
so.placeholder = 'my-cabin-1f3a8c2e9b';
|
||||
so.rmempty = false;
|
||||
so.depends('hysteria2_realm', '1');
|
||||
so.modalonly = true;
|
||||
|
||||
so = ss.taboption('field_hysteria2_realm', form.DynamicList, 'hysteria2_realm_stun_servers', _('STUN servers'));
|
||||
so.datatype = 'hostport';
|
||||
so.default = ['stun.nextcloud.com:3478','stun.sip.us:3478','global.stun.twilio.com:3478'];
|
||||
so.rmempty = false;
|
||||
so.depends('hysteria2_realm', '1');
|
||||
so.modalonly = true;
|
||||
|
||||
// @ 下面支持填写针对server-url的TLS配置(sni, skip-cert-verify, name-cert-verify, fingerprint, certificate, private-key, alpn)
|
||||
hm.renderHy2Realm(ss, data[0]);
|
||||
|
||||
/* TLS fields */
|
||||
so = ss.taboption('field_general', form.Flag, 'tls', _('TLS'));
|
||||
@@ -1491,7 +1462,7 @@ return view.extend({
|
||||
so.validate = function(section_id, value) {
|
||||
const type = this.section.getOption('type').formvalue(section_id);
|
||||
//const plugin_type = this.section.getOption('plugin_type').formvalue(section_id);
|
||||
let tls_alpn = this.section.getUIElement(section_id, 'tls_alpn');
|
||||
let tls_alpn = this.getUIElement(section_id);
|
||||
|
||||
// Default alpn
|
||||
if (!`${tls_alpn.getValue()}`) {
|
||||
@@ -1535,14 +1506,7 @@ return view.extend({
|
||||
|
||||
so = ss.taboption('field_tls', form.Value, 'tls_fingerprint', _('Cert fingerprint'),
|
||||
_('Certificate fingerprint. Used to implement SSL Pinning and prevent MitM.'));
|
||||
so.validate = function(section_id, value) {
|
||||
if (!value)
|
||||
return true;
|
||||
if (!((value.length === 64) && (value.match(/^[0-9a-fA-F]+$/))))
|
||||
return _('Expecting: %s').format(_('valid SHA256 string with %d characters').format(64));
|
||||
|
||||
return true;
|
||||
}
|
||||
so.validate = hm.validateSha256Key;
|
||||
so.depends({tls: '1', type: /^(http|socks5|vmess|vless|trojan|hysteria|hysteria2)$/});
|
||||
so.modalonly = true;
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -169,7 +169,7 @@ start_service() {
|
||||
# Set ENV variables for Client
|
||||
export SAFE_PATHS="$RUN_DIR$(
|
||||
yq 'with(.external-ui; select(. != null) | . = sub("(/?$)", "/placeholder"))
|
||||
| [.external-ui, .tls.certificate, .tls.private-key, .tls.client-auth-cert] | unique | map(select(. != null))
|
||||
| [.external-ui, .tls.certificate, .tls.private-key, .tls.client-auth-cert, .realm-opts.certificate, .realm-opts.private-key] | unique | map(select(. != null))
|
||||
| .[] |= sub("(/[^/]+$)", "") | unique
|
||||
| .[] | sub("(^)", ":")' \
|
||||
"$RUN_DIR/mihomo-c.yaml" | tr -d '\n'
|
||||
@@ -391,7 +391,7 @@ start_service() {
|
||||
else
|
||||
# Set ENV variables for Server
|
||||
export SAFE_PATHS="$RUN_DIR$(
|
||||
yq '.listeners | map([.certificate, .private-key, .client-auth-cert][]) | unique | map(select(. != null))
|
||||
yq '.listeners | map([.certificate, .private-key, .client-auth-cert, .realm-opts.certificate, .realm-opts.private-key][]) | unique | map(select(. != null))
|
||||
| .[] |= sub("(/[^/]+$)", "") | unique
|
||||
| .[] | sub("(^)", ":")' \
|
||||
"$RUN_DIR/mihomo-s.yaml" | tr -d '\n'
|
||||
|
||||
@@ -364,6 +364,8 @@ uci.foreach(uciconf, uciinbd, (cfg) => {
|
||||
listener["jls-config"].proxy = get_proxy(listener["jls-config"].proxy);
|
||||
if (listener["jls-upstream"])
|
||||
listener["jls-upstream"].proxy = get_proxy(listener["jls-upstream"].proxy);
|
||||
if (listener["realm-opts"])
|
||||
listener["realm-opts"].proxy = get_proxy(listener["realm-opts"].proxy);
|
||||
|
||||
push(config.listeners, listener);
|
||||
});
|
||||
@@ -607,13 +609,14 @@ uci.foreach(uciconf, ucinode, (cfg) => {
|
||||
token: cfg.hysteria2_realm_token,
|
||||
"realm-id": cfg.hysteria2_realm_id,
|
||||
"stun-servers": cfg.hysteria2_realm_stun_servers,
|
||||
// @TLS of server-url
|
||||
//sni,
|
||||
//alpn,
|
||||
//"skip-cert-verify",
|
||||
//fingerprint,
|
||||
//certificate,
|
||||
//"private-key"
|
||||
// TLS of server-url
|
||||
sni: cfg.hysteria2_realm_sni,
|
||||
alpn: cfg.hysteria2_realm_alpn,
|
||||
fingerprint: cfg.hysteria2_realm_fingerprint,
|
||||
"name-cert-verify": cfg.hysteria2_realm_name_cert_verify,
|
||||
"skip-cert-verify": strToBool(cfg.hysteria2_realm_skip_cert_verify),
|
||||
certificate: cfg.hysteria2_realm_cert_path, // mTLS
|
||||
"private-key": cfg.hysteria2_realm_key_path // mTLS
|
||||
} : null,
|
||||
|
||||
/* ShadowQUIC */
|
||||
|
||||
@@ -323,13 +323,15 @@ export function parseListener(cfg) {
|
||||
token: cfg.hysteria2_realm_token,
|
||||
"realm-id": cfg.hysteria2_realm_id,
|
||||
"stun-servers": cfg.hysteria2_realm_stun_servers,
|
||||
// @TLS of server-url
|
||||
//sni,
|
||||
//alpn,
|
||||
//"skip-cert-verify",
|
||||
//fingerprint,
|
||||
//certificate,
|
||||
//"private-key"
|
||||
// TLS of server-url
|
||||
sni: cfg.hysteria2_realm_sni,
|
||||
alpn: cfg.hysteria2_realm_alpn,
|
||||
fingerprint: cfg.hysteria2_realm_fingerprint,
|
||||
"name-cert-verify": cfg.hysteria2_realm_name_cert_verify,
|
||||
"skip-cert-verify": strToBool(cfg.hysteria2_realm_skip_cert_verify),
|
||||
certificate: cfg.hysteria2_realm_cert_path, // mTLS
|
||||
"private-key": cfg.hysteria2_realm_key_path, // mTLS
|
||||
proxy: cfg.hysteria2_realm_proxy // raw data need post-processing
|
||||
} : null,
|
||||
|
||||
/* Hysteria2 Realmserver */
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-open-box
|
||||
PKG_VERSION:=0.1.374
|
||||
PKG_RELEASE:=52
|
||||
PKG_VERSION:=0.1.376
|
||||
PKG_RELEASE:=53
|
||||
|
||||
PKG_MAINTAINER:=liandu2024
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
|
||||
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-openvpn-plus
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=9
|
||||
PKG_RELEASE:=10
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_MAINTAINER:=Manfred Jaider <info@masmbit.com>
|
||||
|
||||
|
||||
@@ -836,11 +836,11 @@ symlink() {
|
||||
|
||||
# Remove RAM base directory if it has become completely empty
|
||||
rmdir "${ram_link_dir}" 2>/dev/null
|
||||
|
||||
|
||||
# Smart Web-Folder Cleanup: Check if files other than index.html exist
|
||||
if [ -d "${www_link_dir}" ]; then
|
||||
local has_profiles="0"
|
||||
local check_link
|
||||
local check_link
|
||||
# If a real symlink or folder matching the pattern exists, has_profiles becomes 1
|
||||
for check_link in "${www_link_dir}"/ovpn-tmp-*-*; do
|
||||
if [ -e "${check_link}" ] || [ -L "${check_link}" ]; then
|
||||
@@ -852,7 +852,7 @@ symlink() {
|
||||
if [ "${has_profiles}" = "0" ]; then
|
||||
rm -rf "${www_link_dir}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
printf "%s\n" "SUCCESS: Link directory and static profile deleted from RAM."
|
||||
else
|
||||
@@ -1955,6 +1955,7 @@ cleanup() {
|
||||
# no argument (no shift)
|
||||
local conf_file
|
||||
local instname
|
||||
local raw_list=""
|
||||
local active_list=""
|
||||
local conf_dir="/etc/openvpn/luci"
|
||||
local key_dir="/etc/openvpn/keys"
|
||||
@@ -1962,24 +1963,19 @@ cleanup() {
|
||||
local ram_link_dir="/tmp/luci-ovpn-plus"
|
||||
local www_link_dir="/www/ovpn-downloads"
|
||||
|
||||
# Step 1: Build the list of ACTIVE instances from the instance*.conf files
|
||||
for conf_file in "${conf_dir}"/instance*.conf; do
|
||||
if [ -f "${conf_file}" ]; then
|
||||
instname="${conf_file##*/}"
|
||||
instname="${instname%.conf}"
|
||||
# Step 1: Get all active OpenVPN instances directly from UCI config
|
||||
raw_list=$(uci -q show openvpn | grep "=openvpn" | awk -F'[.=]' '{print $2}' 2>/dev/null)
|
||||
|
||||
if internal_checkname "${instname}"; then
|
||||
# Enforce space separation to prevent partial substring matches later
|
||||
active_list="${active_list} ${instname}"
|
||||
fi
|
||||
# Validate every instance name from UCI before adding it to the official list
|
||||
for instname in ${raw_list}; do
|
||||
if internal_checkname "${instname}"; then
|
||||
active_list="${active_list} ${instname}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Step 2: Remove orphan instance files
|
||||
internal_cleaninst "${active_list}" "${conf_dir}/instance*.conf"
|
||||
internal_cleaninst "${active_list}" "${conf_dir}/instance*.nft"
|
||||
internal_cleaninst "${active_list}" "${conf_dir}/instance*.jmp.nft"
|
||||
internal_cleaninst "${active_list}" "${conf_dir}/instance*.s2s.nft"
|
||||
internal_cleaninst "${active_list}" "${conf_dir}/instance*.ovpn"
|
||||
internal_cleaninst "${active_list}" "${key_dir}/ca_instance*.crt"
|
||||
internal_cleaninst "${active_list}" "${key_dir}/dh_instance*.pem"
|
||||
@@ -1987,8 +1983,6 @@ cleanup() {
|
||||
internal_cleaninst "${active_list}" "${key_dir}/client_instance*.crt"
|
||||
internal_cleaninst "${active_list}" "${key_dir}/server_instance*.key"
|
||||
internal_cleaninst "${active_list}" "${key_dir}/client_instance*.key"
|
||||
internal_cleaninst "${active_list}" "${key_dir}/server_instance*.tls2.key"
|
||||
internal_cleaninst "${active_list}" "${key_dir}/client_instance*.tls2.key"
|
||||
internal_cleaninst "${active_list}" "${run_dir}/openvpn-ddns-instance*.status"
|
||||
|
||||
# Step 3: Remove orphan symlink files
|
||||
@@ -1997,22 +1991,17 @@ cleanup() {
|
||||
|
||||
# Remove the temporary RAM directory ONLY if it is completely empty
|
||||
[ -d "${ram_link_dir}" ] && rmdir "${ram_link_dir}" 2>/dev/null
|
||||
|
||||
# Smart Web-Folder Cleanup: Check if files other than index.html exist
|
||||
if [ -d "${www_link_dir}" ]; then
|
||||
local has_profiles="0"
|
||||
local check_link
|
||||
# If a real symlink or folder matching the pattern exists, has_profiles becomes 1
|
||||
for check_link in "${www_link_dir}"/ovpn-tmp-*-*; do
|
||||
if [ -e "${check_link}" ] || [ -L "${check_link}" ]; then
|
||||
has_profiles="1"
|
||||
break
|
||||
fi
|
||||
done
|
||||
# Remove the web folder if no active profile links are left
|
||||
if [ "${has_profiles}" = "0" ]; then
|
||||
local found_profiles
|
||||
found_profiles="${www_link_dir}/ovpn-tmp-"*-*
|
||||
|
||||
# If the text still has a '*', no active profiles were found
|
||||
if [ "${found_profiles}" = "${www_link_dir}/ovpn-tmp-*-*" ]; then
|
||||
rm -rf "${www_link_dir}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -18,6 +18,29 @@ const callGetFirewallStatus = rpc.declare({ object: 'tailscale', method: 'get_fi
|
||||
let map;
|
||||
let lastDevicesStatus;
|
||||
|
||||
// ui.addTimeLimitedNotification only exists since OpenWrt 24.10. Older
|
||||
// releases, 23.05 included, only have addNotification and would throw on every
|
||||
// call, so fade the notice out ourselves there.
|
||||
function notifyTimed(title, children, timeout, ...classes) {
|
||||
if (typeof ui.addTimeLimitedNotification == 'function')
|
||||
return ui.addTimeLimitedNotification(title, children, timeout, ...classes);
|
||||
|
||||
const msg = ui.addNotification(title, children, ...classes);
|
||||
|
||||
if (typeof timeout == 'number' && timeout > 0 && msg) {
|
||||
window.setTimeout(function() {
|
||||
msg.classList.add('fade-out');
|
||||
msg.classList.remove('fade-in');
|
||||
window.setTimeout(function() {
|
||||
if (msg.parentNode)
|
||||
msg.parentNode.removeChild(msg);
|
||||
}, 250);
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
// uci.changes() returns an object keyed by config name; count the entries so
|
||||
// the firewall button can warn about unsaved work.
|
||||
function countPending(changes) {
|
||||
@@ -111,6 +134,43 @@ function getRunningStatus() {
|
||||
});
|
||||
}
|
||||
|
||||
// Map.save() re-renders the form after every save, so registering the status
|
||||
// poller from s.render would add another 10 second get_status loop per save and
|
||||
// never remove the previous ones. The poller is therefore module level and
|
||||
// guarded by a flag; the flag is the only dedup mechanism on purpose, the
|
||||
// poller function reference is never compared.
|
||||
let statusPollerRegistered = false;
|
||||
|
||||
function pollRunningStatus() {
|
||||
return getRunningStatus().then(function (res) {
|
||||
const view = document.getElementById("service_status_display");
|
||||
if (view) {
|
||||
const content = renderStatus(res);
|
||||
view.replaceChildren(content);
|
||||
}
|
||||
|
||||
lastDevicesStatus = res;
|
||||
const devicesTbody = document.getElementById("tailscale_devices_tbody");
|
||||
if (devicesTbody) {
|
||||
const filterInput = document.getElementById("tailscale_devices_filter");
|
||||
const currentQuery = filterInput ? filterInput.value : '';
|
||||
devicesTbody.replaceChildren(...renderPeerRows(res, currentQuery));
|
||||
}
|
||||
|
||||
// login button only available when logged out
|
||||
const login_btn=document.getElementsByClassName('cbi-button cbi-button-apply')[0];
|
||||
if(login_btn) { login_btn.disabled=(res.status != 'logout'); }
|
||||
});
|
||||
}
|
||||
|
||||
function ensureStatusPoller() {
|
||||
if (statusPollerRegistered)
|
||||
return;
|
||||
|
||||
statusPollerRegistered = true;
|
||||
L.Poll.add(function () { return pollRunningStatus(); }, 10);
|
||||
}
|
||||
|
||||
// Poll the background firewall job until it finishes. A poll that fails
|
||||
// (network reloading, the connection dropped for a moment) is expected and is
|
||||
// simply retried on the next tick instead of being reported as an error.
|
||||
@@ -156,7 +216,7 @@ function pollFirewallJob(runId, timeoutSec) {
|
||||
|
||||
if (state === 'done') {
|
||||
if (stop())
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Firewall configuration applied.')) ], 5000, 'info');
|
||||
notifyTimed(null, [ E('p', _('Firewall configuration applied.')) ], 5000, 'info');
|
||||
resolve(res);
|
||||
return;
|
||||
}
|
||||
@@ -174,7 +234,7 @@ function pollFirewallJob(runId, timeoutSec) {
|
||||
if (state !== lastState) {
|
||||
lastState = state;
|
||||
if (state === 'running' && res?.step === 'firewall')
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Reloading firewall...')) ], 3000, 'info');
|
||||
notifyTimed(null, [ E('p', _('Reloading firewall...')) ], 3000, 'info');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -242,7 +302,7 @@ async function initializeRegionMap() {
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Error reading cached DERP region map: %s').format(e.message || _('Unknown error'))) ], 7000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Error reading cached DERP region map: %s').format(e.message || _('Unknown error'))) ], 7000, 'error');
|
||||
}
|
||||
|
||||
// If no valid cache, fetch from the network
|
||||
@@ -269,10 +329,10 @@ async function initializeRegionMap() {
|
||||
};
|
||||
localStorage.setItem(cacheKey, JSON.stringify(itemToCache));
|
||||
} catch (e) {
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Error caching DERP region map: %s').format(e.message || _('Unknown error'))) ], 7000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Error caching DERP region map: %s').format(e.message || _('Unknown error'))) ], 7000, 'error');
|
||||
}
|
||||
} catch (error) {
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Error fetching DERP region map: %s').format(error.message || _('Unknown error'))) ], 7000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Error fetching DERP region map: %s').format(error.message || _('Unknown error'))) ], 7000, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -564,28 +624,8 @@ return view.extend({
|
||||
s = map.section(form.NamedSection, '_status');
|
||||
s.anonymous = true;
|
||||
s.render = function (section_id) {
|
||||
L.Poll.add(
|
||||
function () {
|
||||
return getRunningStatus().then(function (res) {
|
||||
const view = document.getElementById("service_status_display");
|
||||
if (view) {
|
||||
const content = renderStatus(res);
|
||||
view.replaceChildren(content);
|
||||
}
|
||||
|
||||
lastDevicesStatus = res;
|
||||
const devicesTbody = document.getElementById("tailscale_devices_tbody");
|
||||
if (devicesTbody) {
|
||||
const filterInput = document.getElementById("tailscale_devices_filter");
|
||||
const currentQuery = filterInput ? filterInput.value : '';
|
||||
devicesTbody.replaceChildren(...renderPeerRows(res, currentQuery));
|
||||
}
|
||||
|
||||
// login button only available when logged out
|
||||
const login_btn=document.getElementsByClassName('cbi-button cbi-button-apply')[0];
|
||||
if(login_btn) { login_btn.disabled=(res.status != 'logout'); }
|
||||
});
|
||||
}, 10);
|
||||
// Registering is idempotent and must not affect what is rendered.
|
||||
ensureStatusPoller();
|
||||
|
||||
return E('div', { 'id': 'service_status_display', 'class': 'cbi-value' },
|
||||
_('Collecting data ...')
|
||||
@@ -677,7 +717,7 @@ return view.extend({
|
||||
return null;
|
||||
}
|
||||
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Configuration committed, reloading network and firewall. This can take a moment.')) ], 5000, 'info');
|
||||
notifyTimed(null, [ E('p', _('Configuration committed, reloading network and firewall. This can take a moment.')) ], 5000, 'info');
|
||||
return pollFirewallJob(res.run_id);
|
||||
}).catch(function(err) {
|
||||
ui.addNotification(null, E('p', {}, _('Failed to configure firewall: %s').format(err?.message || err?.error || err || _('Unknown error'))), 'error');
|
||||
@@ -759,7 +799,7 @@ return view.extend({
|
||||
const customServerAuth = customserverAuthInput ? customserverAuthInput.value : '';
|
||||
const loginWindow = window.open('', '_blank');
|
||||
if (!loginWindow) {
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Could not open a new tab. Please check if your browser or an extension blocked the pop-up.')) ], 10000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Could not open a new tab. Please check if your browser or an extension blocked the pop-up.')) ], 10000, 'error');
|
||||
return;
|
||||
}
|
||||
// Display a prompt message in the new window
|
||||
@@ -786,11 +826,11 @@ return view.extend({
|
||||
doc.body.innerHTML =
|
||||
'<h2>' + _('Error') + '</h2>' +
|
||||
'<p>' + _('Failed to get login URL. You may close this tab.') + '</p>';
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Failed to get login URL: %s').format(res?.error || _('Invalid response from server.'))) ], 7000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Failed to get login URL: %s').format(res?.error || _('Invalid response from server.'))) ], 7000, 'error');
|
||||
}
|
||||
}).catch(function(err) {
|
||||
ui.hideModal();
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Failed to get login URL: %s').format(err.message || _('Unknown error'))) ], 7000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Failed to get login URL: %s').format(err.message || _('Unknown error'))) ], 7000, 'error');
|
||||
});
|
||||
};
|
||||
|
||||
@@ -814,10 +854,10 @@ return view.extend({
|
||||
return callDoLogout().then(function(res) {
|
||||
unwrapRpc(res, _('Logout'));
|
||||
ui.hideModal();
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Successfully logged out.')) ], 5000, 'info');
|
||||
notifyTimed(null, [ E('p', _('Successfully logged out.')) ], 5000, 'info');
|
||||
}).catch(function(err) {
|
||||
ui.hideModal();
|
||||
ui.addTimeLimitedNotification(null, [ E('p', _('Logout failed: %s').format(err.message || _('Unknown error'))) ], 7000, 'error');
|
||||
notifyTimed(null, [ E('p', _('Logout failed: %s').format(err.message || _('Unknown error'))) ], 7000, 'error');
|
||||
});
|
||||
}
|
||||
}, _('Logout'))
|
||||
@@ -872,13 +912,16 @@ return view.extend({
|
||||
// standard OpenWrt apply mechanism, which triggers /etc/init.d/tailscale-settings
|
||||
// and provides automatic rollback protection if the device becomes unreachable.
|
||||
handleSaveApply(ev, mode) {
|
||||
// Read the submitted value before map.save() consumes the staged delta.
|
||||
// uci.get() prefers the staged change over the saved value, and the
|
||||
// staged delta is only populated once the form has been parsed, which
|
||||
// map.save() guarantees here.
|
||||
const wantEnabled = uci.get('tailscale', 'settings', 'service_enabled');
|
||||
// The submitted value only reaches the uci model while map.save() parses
|
||||
// the form, so reading it before map.save() returns the previously saved
|
||||
// value: switching the service off then passed '1' and never armed the
|
||||
// stop request. Read it in the save callback, which runs right after the
|
||||
// form was parsed and before the staged changes are sent to the device.
|
||||
let wantEnabled;
|
||||
|
||||
return map.save().then(function () {
|
||||
return map.save(function () {
|
||||
wantEnabled = uci.get('tailscale', 'settings', 'service_enabled');
|
||||
}).then(function () {
|
||||
// Only records the disable request; the reload handler performs
|
||||
// the stop after the commit, so a LuCI rollback still finds a
|
||||
// running daemon. One concurrency slot on purpose: an overlapping
|
||||
@@ -886,7 +929,10 @@ return view.extend({
|
||||
// Fail-open on purpose: an install whose rpcd ACL cache predates
|
||||
// this method would otherwise be unable to apply anything. The
|
||||
// worst case is that the stop is skipped for this apply.
|
||||
return callSetServiceEnabled({ enabled: wantEnabled === '0' ? '0' : '1' })
|
||||
// The declaration maps positional arguments to its params, so pass
|
||||
// the value itself: { enabled: ... } reached ubus as the value of
|
||||
// enabled and was rejected as an invalid argument.
|
||||
return callSetServiceEnabled(wantEnabled === '0' ? '0' : '1')
|
||||
.catch(function(err) {
|
||||
console.warn('set_service_enabled failed: %s', err);
|
||||
return null;
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:47
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
msgid "%s failed"
|
||||
msgstr "Error de %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid "(Experimental) Reduce Memory Usage"
|
||||
msgstr "(Experimental) Reducir el uso de memoria"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:711
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
msgid "1. Enable \"Advertise Exit Node\"."
|
||||
msgstr "1. Active \"Anunciar como nodo de salida\"."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:693
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:733
|
||||
msgid "1. Select \"Accept Routes\" (to access remote devices)."
|
||||
msgstr "1. Marque \"Aceptar rutas\" (para acceder a dispositivos remotos)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:712
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:752
|
||||
msgid ""
|
||||
"2. Click \"Auto Configure Firewall\" (it forwards Tailscale traffic "
|
||||
"to WAN)."
|
||||
@@ -25,7 +25,7 @@ msgstr ""
|
||||
"2. Haga clic en \"Configurar el cortafuegos automáticamente\" "
|
||||
"(reenvía el tráfico de Tailscale hacia la WAN)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:694
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
msgid ""
|
||||
"2. In \"Advertise Routes\", select your local subnet (to allow remote "
|
||||
"devices to access this LAN)."
|
||||
@@ -33,13 +33,13 @@ msgstr ""
|
||||
"2. En \"Anunciar rutas\", seleccione su subred local (para que los "
|
||||
"dispositivos remotos puedan acceder a esta LAN)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:695
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
msgid "3. Click \"Auto Configure Firewall\" (to allow traffic forwarding)."
|
||||
msgstr ""
|
||||
"3. Haga clic en \"Configurar el cortafuegos automáticamente\" (para "
|
||||
"permitir el reenvío de tráfico)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:753
|
||||
msgid ""
|
||||
"3. In the Tailscale admin console, edit this device under the route "
|
||||
"settings and approve it as an Exit Node."
|
||||
@@ -47,27 +47,27 @@ msgstr ""
|
||||
"3. En la consola de administración de Tailscale, edite este "
|
||||
"dispositivo en los ajustes de rutas y apruébelo como nodo de salida."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:718
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:758
|
||||
msgid "4. On the client, set this device as its exit node."
|
||||
msgstr "4. En el cliente, configure este dispositivo como su nodo de salida."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Accept Routes"
|
||||
msgstr "Aceptar rutas"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:725
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:765
|
||||
msgid "Account Settings"
|
||||
msgstr "Ajustes de la cuenta"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Advertise Exit Node"
|
||||
msgstr "Anunciar como nodo de salida"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid "Advertise Routes"
|
||||
msgstr "Anunciar rutas"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid ""
|
||||
"Advertise subnet routes behind this device. Select from the detected "
|
||||
"subnets below or enter custom routes (comma-separated)."
|
||||
@@ -76,15 +76,15 @@ msgstr ""
|
||||
"Seleccione una de las subredes detectadas a continuación o introduzca "
|
||||
"rutas personalizadas separadas por comas."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "Allow LAN Access"
|
||||
msgstr "Permitir acceso a la LAN"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Allow accepting routes announced by other nodes."
|
||||
msgstr "Permitir aceptar las rutas anunciadas por otros nodos."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Allow connecting to this device through the SSH function of Tailscale."
|
||||
msgstr ""
|
||||
"Permitir conectarse a este dispositivo mediante la función SSH de "
|
||||
@@ -94,40 +94,40 @@ msgstr ""
|
||||
msgid "Allow user access to tailscale"
|
||||
msgstr "Permitir el acceso de usuarios a Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:170
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:230
|
||||
msgid "Another firewall reload is already running"
|
||||
msgstr "Ya se está recargando el cortafuegos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:799
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:839
|
||||
msgid "Are you sure you want to log out?"
|
||||
msgstr "¿Seguro que desea cerrar la sesión?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:684
|
||||
msgid "Auto Configure Firewall"
|
||||
msgstr "Configurar el cortafuegos automáticamente"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:806
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:846
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:750
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:790
|
||||
msgid "Click to Log out account on this device."
|
||||
msgstr "Haga clic para cerrar la sesión de la cuenta en este dispositivo."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:729
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
msgid "Click to get a login URL for this device."
|
||||
msgstr ""
|
||||
"Haga clic para obtener una URL de inicio de sesión para este "
|
||||
"dispositivo."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:291
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:383
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:591
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:850
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:443
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:631
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:890
|
||||
msgid "Collecting data ..."
|
||||
msgstr "Recopilando datos..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:680
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:720
|
||||
msgid ""
|
||||
"Configuration committed, reloading network and firewall. This can "
|
||||
"take a moment."
|
||||
@@ -135,23 +135,23 @@ msgstr ""
|
||||
"Configuración guardada, recargando la red y el cortafuegos. Esto "
|
||||
"puede tardar un momento."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:673
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
msgid "Configuring firewall"
|
||||
msgstr "Configurando el cortafuegos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:826
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:866
|
||||
msgid "Confirm Logout"
|
||||
msgstr "Confirmar cierre de sesión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:452
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:512
|
||||
msgid "Connection Info"
|
||||
msgstr "Información de conexión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Controls how Tailscale DNS is handled."
|
||||
msgstr "Controla cómo se gestiona el DNS de Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:762
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:802
|
||||
msgid ""
|
||||
"Could not open a new tab. Please check if your browser or an "
|
||||
"extension blocked the pop-up."
|
||||
@@ -159,43 +159,43 @@ msgstr ""
|
||||
"No se pudo abrir una pestaña nueva. Compruebe si su navegador o "
|
||||
"alguna extensión bloqueó la ventana emergente."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:774
|
||||
msgid "Custom Login Server"
|
||||
msgstr "Servidor de inicio de sesión personalizado"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:742
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:782
|
||||
msgid "Custom Login Server Auth Key"
|
||||
msgstr "Clave de autenticación del servidor de inicio de sesión personalizado"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "DNS Mode"
|
||||
msgstr "Modo DNS"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid "Daemon MTU"
|
||||
msgstr "MTU del demonio"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:865
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:905
|
||||
msgid "Daemon Settings"
|
||||
msgstr "Ajustes del demonio"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Declare this device as an Exit Node."
|
||||
msgstr "Declarar este dispositivo como nodo de salida."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:869
|
||||
msgid "Devices List"
|
||||
msgstr "Lista de dispositivos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Firewall Configuration"
|
||||
msgstr "Desactivar la configuración del cortafuegos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid "Disable SNAT"
|
||||
msgstr "Desactivar SNAT"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid ""
|
||||
"Disable Source NAT (SNAT) for traffic to advertised routes. Most "
|
||||
"users should leave this unchecked."
|
||||
@@ -204,46 +204,46 @@ msgstr ""
|
||||
"tráfico hacia las rutas anunciadas. La mayoría de los usuarios deben "
|
||||
"dejar esta opción desmarcada."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Tailscale netfilter auto-configuration (--netfilter-mode=off)."
|
||||
msgstr ""
|
||||
"Desactivar la autoconfiguración de netfilter de Tailscale "
|
||||
"(--netfilter-mode=off)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Disabled"
|
||||
msgstr "Desactivado"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Disabled: system DNS only."
|
||||
msgstr "Desactivado: solo el DNS del sistema."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:791
|
||||
msgid "Disconnect from Tailscale and expire current node key."
|
||||
msgstr "Desconectar de Tailscale e invalidar la clave actual del nodo."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:41
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
msgid "Empty reply from server"
|
||||
msgstr "Respuesta vacía del servidor"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid "Enable Peer Relay"
|
||||
msgstr "Activar Peer Relay"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Enable Tailscale SSH"
|
||||
msgstr "Activar Tailscale SSH"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid "Enable Tailscale Service"
|
||||
msgstr "Activar el servicio Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid "Enable Web Interface"
|
||||
msgstr "Activar la interfaz web"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid ""
|
||||
"Enable or disable the Tailscale service. When disabled, the service "
|
||||
"will be stopped and the process will be killed."
|
||||
@@ -251,7 +251,7 @@ msgstr ""
|
||||
"Activa o desactiva el servicio Tailscale. Al desactivarlo, el "
|
||||
"servicio se detendrá y el proceso se finalizará."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid ""
|
||||
"Enable this device as a Peer Relay server. Requires a public IP and "
|
||||
"an UDP port open on the router."
|
||||
@@ -259,11 +259,11 @@ msgstr ""
|
||||
"Activa este dispositivo como servidor Peer Relay. Requiere una IP "
|
||||
"pública y un puerto UDP abierto en el router."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Enabled"
|
||||
msgstr "Activado"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid ""
|
||||
"Enabling this option can reduce memory usage, but it may sacrifice "
|
||||
"some performance (set GOGC=10)."
|
||||
@@ -271,23 +271,23 @@ msgstr ""
|
||||
"Activar esta opción puede reducir el uso de memoria, pero puede "
|
||||
"mermar algo el rendimiento (establece GOGC=10)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:787
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:827
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
msgid "Error caching DERP region map: %s"
|
||||
msgstr "Error al guardar en caché el mapa de regiones DERP: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
msgid "Error fetching DERP region map: %s"
|
||||
msgstr "Error al obtener el mapa de regiones DERP: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
msgid "Error reading cached DERP region map: %s"
|
||||
msgstr "Error al leer el mapa de regiones DERP en caché: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:685
|
||||
msgid ""
|
||||
"Essential configuration for Subnet Routing (Site-to-Site) and Exit "
|
||||
"Node features."
|
||||
@@ -295,12 +295,12 @@ msgstr ""
|
||||
"Configuración esencial para las funciones de enrutamiento de subredes "
|
||||
"(sitio a sitio) y de nodo de salida."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid "Exit Node"
|
||||
msgstr "Nodo de salida"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid ""
|
||||
"Expose a web interface on port 5252 for managing this node over "
|
||||
"Tailscale."
|
||||
@@ -308,66 +308,66 @@ msgstr ""
|
||||
"Expone una interfaz web en el puerto 5252 para administrar este nodo "
|
||||
"a través de Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
msgid "Failed to configure firewall: %s"
|
||||
msgstr "No se pudo configurar el cortafuegos: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:788
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:828
|
||||
msgid "Failed to get login URL. You may close this tab."
|
||||
msgstr ""
|
||||
"No se pudo obtener la URL de inicio de sesión. Puede cerrar esta "
|
||||
"pestaña."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
msgid "Failed to get login URL: %s"
|
||||
msgstr "No se pudo obtener la URL de inicio de sesión: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Failed to load logs: %s"
|
||||
msgstr "No se pudieron cargar los registros: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:487
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:547
|
||||
msgid "Filter peers by name, IP, or OS..."
|
||||
msgstr "Filtrar pares por nombre, IP o sistema operativo..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:504
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:564
|
||||
msgid "Filter:"
|
||||
msgstr "Filtro:"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid "Firewall Mode"
|
||||
msgstr "Modo del cortafuegos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:716
|
||||
msgid "Firewall configuration already applied."
|
||||
msgstr "La configuración del cortafuegos ya está aplicada."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:159
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:219
|
||||
msgid "Firewall configuration applied."
|
||||
msgstr "Configuración del cortafuegos aplicada."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:165
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:225
|
||||
msgid "Firewall reload failed"
|
||||
msgstr "Error al recargar el cortafuegos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:600
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:640
|
||||
msgid "General Settings"
|
||||
msgstr "Ajustes generales"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:509
|
||||
msgid "Hostname"
|
||||
msgstr "Nombre de host"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:706
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:746
|
||||
msgid "How to enable Exit Node?"
|
||||
msgstr "¿Cómo activar el nodo de salida?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
msgid "How to enable Site-to-Site?"
|
||||
msgstr "¿Cómo activar la conexión sitio a sitio?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:730
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
msgid ""
|
||||
"If the timeout is displayed, you can refresh the page and click Login "
|
||||
"again."
|
||||
@@ -375,7 +375,7 @@ msgstr ""
|
||||
"Si aparece un tiempo de espera agotado, puede actualizar la página y "
|
||||
"volver a hacer clic en Iniciar sesión."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:744
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:784
|
||||
msgid ""
|
||||
"If you are using custom login server but not providing an Auth Key, "
|
||||
"will redirect to the login page without pre-filling the key."
|
||||
@@ -384,15 +384,15 @@ msgstr ""
|
||||
"proporciona una clave de autenticación, se redirigirá a la página de "
|
||||
"inicio de sesión sin rellenar la clave previamente."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:215
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
msgid "Invalid Date"
|
||||
msgstr "Fecha no válida"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
msgid "Invalid response from server."
|
||||
msgstr "Respuesta no válida del servidor."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:646
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:686
|
||||
msgid ""
|
||||
"It creates the tailscale interface, adds it to a firewall zone, and "
|
||||
"sets up forwarding between LAN and Tailscale, plus Tailscale to WAN."
|
||||
@@ -401,55 +401,55 @@ msgstr ""
|
||||
"configura el reenvío entre la LAN y Tailscale, además de Tailscale "
|
||||
"hacia la WAN."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:218
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:278
|
||||
msgid "Just now"
|
||||
msgstr "Ahora mismo"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:330
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:390
|
||||
msgid "LOGGED OUT"
|
||||
msgstr "SESIÓN CERRADA"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:455
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:515
|
||||
msgid "Last Seen"
|
||||
msgstr "Última conexión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:776
|
||||
msgid "Leave blank for default Tailscale control plane."
|
||||
msgstr ""
|
||||
"Déjelo en blanco para usar el plano de control predeterminado de "
|
||||
"Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:853
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:893
|
||||
msgid "Loading logs"
|
||||
msgstr "Cargando registros"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Logging out..."
|
||||
msgstr "Cerrando sesión..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
msgid "Login"
|
||||
msgstr "Iniciar sesión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:749
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:815
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:823
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:855
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:863
|
||||
msgid "Logout"
|
||||
msgstr "Cerrar sesión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
msgid "Logout failed: %s"
|
||||
msgstr "Error al cerrar sesión: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:836
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:876
|
||||
msgid "Logs"
|
||||
msgstr "Registros"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "MagicDNS: Tailscale overrides resolv.conf."
|
||||
msgstr "MagicDNS: Tailscale sobrescribe resolv.conf."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:648
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
msgid ""
|
||||
"Masquerading and MSS Clamping (MTU fix) are enabled to keep "
|
||||
"connections stable."
|
||||
@@ -457,62 +457,62 @@ msgstr ""
|
||||
"Se activan el enmascaramiento y el MSS Clamping (corrección de MTU) "
|
||||
"para mantener estables las conexiones."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:212
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
msgid "N/A"
|
||||
msgstr "N/D"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:341
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:401
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "NO EN EJECUCIÓN"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:439
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:499
|
||||
msgid "No matching peer devices found."
|
||||
msgstr "No se encontraron dispositivos pares que coincidan."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:460
|
||||
msgid "No peer devices found."
|
||||
msgstr "No se encontraron dispositivos pares."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:368
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:428
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:880
|
||||
msgid "No tailscale-related logs found."
|
||||
msgstr "No se encontraron registros relacionados con Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:613
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:653
|
||||
msgid "None"
|
||||
msgstr "Ninguno"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:213
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:273
|
||||
msgid "Now"
|
||||
msgstr "Ahora"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:451
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:511
|
||||
msgid "OS"
|
||||
msgstr "SO"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Offline"
|
||||
msgstr "Sin conexión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Online"
|
||||
msgstr "En línea"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward"
|
||||
msgstr "Reenvío OpenWrt"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward: MagicDNS via dnsmasq forwarding.(Only support ts.net)"
|
||||
msgstr ""
|
||||
"Reenvío de OpenWrt: MagicDNS mediante el reenvío de dnsmasq. (Solo "
|
||||
"admite ts.net)"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:39
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
msgid "Operation"
|
||||
msgstr "Operación"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:775
|
||||
msgid ""
|
||||
"Optional: Specify a custom control server URL (e.g., a Headscale "
|
||||
"instance, %s)."
|
||||
@@ -520,7 +520,7 @@ msgstr ""
|
||||
"Opcional: especifique la URL de un servidor de control personalizado "
|
||||
"(por ejemplo, una instancia de Headscale, %s)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:743
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:783
|
||||
msgid ""
|
||||
"Optional: Specify an authentication key for the custom control "
|
||||
"server. Leave blank if not required."
|
||||
@@ -528,50 +528,50 @@ msgstr ""
|
||||
"Opcional: especifique una clave de autenticación para el servidor de "
|
||||
"control personalizado. Déjelo en blanco si no es necesaria."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:604
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
msgid "Peer Relay Port"
|
||||
msgstr "Puerto de Peer Relay"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:392
|
||||
msgid "Please use the login button in the settings below to authenticate."
|
||||
msgstr ""
|
||||
"Utilice el botón de inicio de sesión de los ajustes que aparecen a "
|
||||
"continuación para autenticarse."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Please wait."
|
||||
msgstr "Espere, por favor."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "RUNNING"
|
||||
msgstr "EN EJECUCIÓN"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:453
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:513
|
||||
msgid "RX"
|
||||
msgstr "RX"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:845
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:885
|
||||
msgid "Refresh"
|
||||
msgstr "Actualizar"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:177
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:237
|
||||
msgid "Reloading firewall..."
|
||||
msgstr "Recargando el cortafuegos..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
msgid "Requesting Login URL..."
|
||||
msgstr "Solicitando la URL de inicio de sesión..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:809
|
||||
msgid "Requesting Tailscale login URL... Please wait."
|
||||
msgstr ""
|
||||
"Solicitando la URL de inicio de sesión de Tailscale... Espere, por "
|
||||
"favor."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid ""
|
||||
"Select an exit node from the list. If enabled, Allow LAN Access is "
|
||||
"enabled implicitly."
|
||||
@@ -579,7 +579,7 @@ msgstr ""
|
||||
"Seleccione un nodo de salida de la lista. Si se activa, Permitir "
|
||||
"acceso a la LAN se activa de forma implícita."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid ""
|
||||
"Select the firewall backend for Tailscale to use. Requires service "
|
||||
"restart to take effect."
|
||||
@@ -587,14 +587,14 @@ msgstr ""
|
||||
"Seleccione el backend de cortafuegos que usará Tailscale. Requiere "
|
||||
"reiniciar el servicio para aplicarse."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:320
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:328
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:340
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:380
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:388
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "Service Status"
|
||||
msgstr "Estado del servicio"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid ""
|
||||
"Set a custom MTU for the Tailscale daemon. Leave blank to use the "
|
||||
"default value."
|
||||
@@ -602,60 +602,60 @@ msgstr ""
|
||||
"Establezca un MTU personalizado para el demonio de Tailscale. Déjelo "
|
||||
"en blanco para usar el valor predeterminado."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid "Shields Up"
|
||||
msgstr "Bloquear conexiones entrantes"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:448
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:508
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:817
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:857
|
||||
msgid "Successfully logged out."
|
||||
msgstr "Sesión cerrada correctamente."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:321
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:381
|
||||
msgid "TAILSCALE NOT FOUND"
|
||||
msgstr "TAILSCALE NO ENCONTRADO"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "TUN Mode"
|
||||
msgstr "Modo TUN"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:454
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:514
|
||||
msgid "TX"
|
||||
msgstr "TX"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:354
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:414
|
||||
msgid "Tailnet Name"
|
||||
msgstr "Nombre de la tailnet"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
#: luci-app-tailscale-community/root/usr/share/luci/menu.d/luci-app-tailscale-community.json:1
|
||||
msgid "Tailscale"
|
||||
msgstr "Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:297
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:357
|
||||
msgid "Tailscale Health Check: %s"
|
||||
msgstr "Comprobación de estado de Tailscale: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:450
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:510
|
||||
msgid "Tailscale IP"
|
||||
msgstr "IP de Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:352
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:412
|
||||
msgid "Tailscale IPv4"
|
||||
msgstr "IPv4 de Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:353
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:413
|
||||
msgid "Tailscale IPv6"
|
||||
msgstr "IPv6 de Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:808
|
||||
msgid "Tailscale Login"
|
||||
msgstr "Inicio de sesión en Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
msgid ""
|
||||
"Tailscale is a mesh VPN solution that makes it easy to connect your "
|
||||
"devices securely. This configuration page allows you to manage "
|
||||
@@ -665,11 +665,11 @@ msgstr ""
|
||||
"segura de sus dispositivos. Esta página de configuración le permite "
|
||||
"gestionar los ajustes de Tailscale en su dispositivo OpenWrt."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:389
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
msgid "Tailscale status error"
|
||||
msgstr "Error de estado de Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:647
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:687
|
||||
msgid ""
|
||||
"The Tailscale to WAN forwarding is what lets clients send their "
|
||||
"internet traffic through this device as an Exit Node."
|
||||
@@ -678,11 +678,11 @@ msgstr ""
|
||||
"clientes envíen su tráfico de Internet a través de este dispositivo "
|
||||
"como nodo de salida."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:810
|
||||
msgid "This can take up to 30 seconds."
|
||||
msgstr "Esto puede tardar hasta 30 segundos."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:800
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
msgid ""
|
||||
"This will disconnect this device from your Tailnet and require you to "
|
||||
"re-authenticate."
|
||||
@@ -690,12 +690,12 @@ msgstr ""
|
||||
"Esto desconectará este dispositivo de su tailnet y requerirá que "
|
||||
"vuelva a autenticarse."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:143
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:194
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:203
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:254
|
||||
msgid "Timed out waiting for the firewall reload"
|
||||
msgstr "Se agotó el tiempo de espera para la recarga del cortafuegos"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:605
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
msgid ""
|
||||
"UDP port for the Peer Relay service. Open this port on your router "
|
||||
"firewall/NAT."
|
||||
@@ -703,21 +703,21 @@ msgstr ""
|
||||
"Puerto UDP para el servicio Peer Relay. Abra este puerto en el "
|
||||
"cortafuegos/NAT del router."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Unknown error"
|
||||
msgstr "Error desconocido"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:350
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:410
|
||||
msgid "Version"
|
||||
msgstr "Versión"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid ""
|
||||
"When enabled, blocks all inbound connections from the Tailscale "
|
||||
"network."
|
||||
@@ -725,11 +725,11 @@ msgstr ""
|
||||
"Cuando está activado, bloquea todas las conexiones entrantes de la "
|
||||
"red Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "When using the exit node, access to the local LAN is allowed."
|
||||
msgstr "Al usar el nodo de salida, se permite el acceso a la LAN local."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:660
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:700
|
||||
msgid ""
|
||||
"You have unapplied changes. Save & Apply them first so the firewall "
|
||||
"matches the form."
|
||||
@@ -737,7 +737,7 @@ msgstr ""
|
||||
"Tiene cambios sin aplicar. Guárdelos y aplíquelos primero para que el "
|
||||
"cortafuegos coincida con el formulario."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:696
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
msgid ""
|
||||
"[Important] Log in to the Tailscale admin console and manually enable "
|
||||
"\"Subnet Routes\" for this device."
|
||||
@@ -746,7 +746,7 @@ msgstr ""
|
||||
"Tailscale y habilite manualmente \"Subnet Routes\" para este "
|
||||
"dispositivo."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:719
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:759
|
||||
msgid ""
|
||||
"[Important] Step 3 cannot be done here: it needs your Tailscale "
|
||||
"account."
|
||||
@@ -754,7 +754,7 @@ msgstr ""
|
||||
"[Importante] El paso 3 no se puede realizar aquí: requiere su cuenta "
|
||||
"de Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:221
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:281
|
||||
msgid "ago"
|
||||
msgstr "atrás"
|
||||
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:47
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
msgid "%s failed"
|
||||
msgstr "Niepowodzenie operacji: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid "(Experimental) Reduce Memory Usage"
|
||||
msgstr "(Eksperymentalne) Zmniejsz użycie pamięci"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:711
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
msgid "1. Enable \"Advertise Exit Node\"."
|
||||
msgstr "1. Włącz \"Ogłaszaj węzeł wyjścia\"."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:693
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:733
|
||||
msgid "1. Select \"Accept Routes\" (to access remote devices)."
|
||||
msgstr ""
|
||||
"1. Wybierz \"Akceptuj trasy\" (aby uzyskać dostęp do zdalnych "
|
||||
"urządzeń)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:712
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:752
|
||||
msgid ""
|
||||
"2. Click \"Auto Configure Firewall\" (it forwards Tailscale traffic "
|
||||
"to WAN)."
|
||||
@@ -27,7 +27,7 @@ msgstr ""
|
||||
"2. Kliknij \"Automatycznie konfiguruj zaporę\" (przekazuje ruch "
|
||||
"Tailscale do sieci WAN)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:694
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
msgid ""
|
||||
"2. In \"Advertise Routes\", select your local subnet (to allow remote "
|
||||
"devices to access this LAN)."
|
||||
@@ -35,13 +35,13 @@ msgstr ""
|
||||
"2. W \"Ogłaszaj trasy\" wybierz swoją lokalną podsieć (aby umożliwić "
|
||||
"zdalnym urządzaniom dostęp do tej sieci LAN)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:695
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
msgid "3. Click \"Auto Configure Firewall\" (to allow traffic forwarding)."
|
||||
msgstr ""
|
||||
"3. Kliknij \"Automatycznie konfiguruj zaporę\" (aby zezwolić na "
|
||||
"przekazywanie ruchu)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:753
|
||||
msgid ""
|
||||
"3. In the Tailscale admin console, edit this device under the route "
|
||||
"settings and approve it as an Exit Node."
|
||||
@@ -49,27 +49,27 @@ msgstr ""
|
||||
"3. W panelu administracyjnym Tailscale edytuj to urządzenie w "
|
||||
"ustawieniach tras i zatwierdź je jako węzeł wyjścia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:718
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:758
|
||||
msgid "4. On the client, set this device as its exit node."
|
||||
msgstr "4. W kliencie ustaw to urządzenie jako węzeł wyjścia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Accept Routes"
|
||||
msgstr "Akceptuj trasy"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:725
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:765
|
||||
msgid "Account Settings"
|
||||
msgstr "Ustawienia konta"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Advertise Exit Node"
|
||||
msgstr "Ogłaszaj węzeł wyjścia"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid "Advertise Routes"
|
||||
msgstr "Ogłaszaj trasy"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid ""
|
||||
"Advertise subnet routes behind this device. Select from the detected "
|
||||
"subnets below or enter custom routes (comma-separated)."
|
||||
@@ -78,15 +78,15 @@ msgstr ""
|
||||
"podsieci poniżej lub wprowadź niestandardowe trasy (oddzielone "
|
||||
"przecinkami)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "Allow LAN Access"
|
||||
msgstr "Zezwól na dostęp do LAN"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Allow accepting routes announced by other nodes."
|
||||
msgstr "Zezwól na akceptowanie tras ogłaszanych przez inne węzły."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Allow connecting to this device through the SSH function of Tailscale."
|
||||
msgstr "Zezwól na łączenie się z tym urządzeniem przez funkcję SSH Tailscale."
|
||||
|
||||
@@ -94,38 +94,38 @@ msgstr "Zezwól na łączenie się z tym urządzeniem przez funkcję SSH Tailsca
|
||||
msgid "Allow user access to tailscale"
|
||||
msgstr "Zezwól użytkownikowi na dostęp do Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:170
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:230
|
||||
msgid "Another firewall reload is already running"
|
||||
msgstr "Trwa już ponowne ładowanie zapory"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:799
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:839
|
||||
msgid "Are you sure you want to log out?"
|
||||
msgstr "Czy na pewno chcesz się wylogować?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:684
|
||||
msgid "Auto Configure Firewall"
|
||||
msgstr "Automatycznie konfiguruj zaporę"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:806
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:846
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:750
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:790
|
||||
msgid "Click to Log out account on this device."
|
||||
msgstr "Kliknij, aby wylogować konto z tego urządzenia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:729
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
msgid "Click to get a login URL for this device."
|
||||
msgstr "Kliknij, aby uzyskać URL logowania dla tego urządzenia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:291
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:383
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:591
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:850
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:443
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:631
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:890
|
||||
msgid "Collecting data ..."
|
||||
msgstr "Zbieranie danych ..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:680
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:720
|
||||
msgid ""
|
||||
"Configuration committed, reloading network and firewall. This can "
|
||||
"take a moment."
|
||||
@@ -133,23 +133,23 @@ msgstr ""
|
||||
"Konfiguracja została zatwierdzona, ponowne ładowanie sieci i zapory. "
|
||||
"Może to chwilę potrwać."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:673
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
msgid "Configuring firewall"
|
||||
msgstr "Konfigurowanie zapory"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:826
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:866
|
||||
msgid "Confirm Logout"
|
||||
msgstr "Potwierdź wylogowanie"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:452
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:512
|
||||
msgid "Connection Info"
|
||||
msgstr "Informacje o połączeniu"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Controls how Tailscale DNS is handled."
|
||||
msgstr "Kontroluje sposób obsługi DNS Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:762
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:802
|
||||
msgid ""
|
||||
"Could not open a new tab. Please check if your browser or an "
|
||||
"extension blocked the pop-up."
|
||||
@@ -157,43 +157,43 @@ msgstr ""
|
||||
"Nie można otworzyć nowej karty. Sprawdź, czy przeglądarka lub "
|
||||
"rozszerzenie zablokowało wyskakujące okno."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:774
|
||||
msgid "Custom Login Server"
|
||||
msgstr "Niestandardowy serwer logowania"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:742
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:782
|
||||
msgid "Custom Login Server Auth Key"
|
||||
msgstr "Klucz autoryzacji niestandardowego serwera logowania"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "DNS Mode"
|
||||
msgstr "Tryb DNS"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid "Daemon MTU"
|
||||
msgstr "MTU demona"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:865
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:905
|
||||
msgid "Daemon Settings"
|
||||
msgstr "Ustawienia demona"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Declare this device as an Exit Node."
|
||||
msgstr "Deklaruje to urządzenie jako węzeł wyjścia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:869
|
||||
msgid "Devices List"
|
||||
msgstr "Lista urządzeń"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Firewall Configuration"
|
||||
msgstr "Wyłącz konfigurację zapory"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid "Disable SNAT"
|
||||
msgstr "Wyłącz SNAT"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid ""
|
||||
"Disable Source NAT (SNAT) for traffic to advertised routes. Most "
|
||||
"users should leave this unchecked."
|
||||
@@ -201,46 +201,46 @@ msgstr ""
|
||||
"Wyłącz NAT źródłowy (SNAT) dla ruchu do ogłaszanych tras. Większość "
|
||||
"użytkowników powinna zostawić to pole niezaznaczone."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Tailscale netfilter auto-configuration (--netfilter-mode=off)."
|
||||
msgstr ""
|
||||
"Wyłącz automatyczną konfigurację netfilter Tailscale "
|
||||
"(--netfilter-mode=off)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Disabled"
|
||||
msgstr "Wyłączone"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Disabled: system DNS only."
|
||||
msgstr "Wyłączone: tylko DNS systemowy."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:791
|
||||
msgid "Disconnect from Tailscale and expire current node key."
|
||||
msgstr "Rozłącz z Tailscale i wygaś bieżący klucz węzła."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:41
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
msgid "Empty reply from server"
|
||||
msgstr "Pusta odpowiedź z serwera"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid "Enable Peer Relay"
|
||||
msgstr "Włącz przekazywanie między węzłami"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Enable Tailscale SSH"
|
||||
msgstr "Włącz SSH Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid "Enable Tailscale Service"
|
||||
msgstr "Włącz usługę Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid "Enable Web Interface"
|
||||
msgstr "Włącz interfejs webowy"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid ""
|
||||
"Enable or disable the Tailscale service. When disabled, the service "
|
||||
"will be stopped and the process will be killed."
|
||||
@@ -248,7 +248,7 @@ msgstr ""
|
||||
"Włącz lub wyłącz usługę Tailscale. Po wyłączeniu usługa zostanie "
|
||||
"zatrzymana, a proces zostanie zakończony."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid ""
|
||||
"Enable this device as a Peer Relay server. Requires a public IP and "
|
||||
"an UDP port open on the router."
|
||||
@@ -256,11 +256,11 @@ msgstr ""
|
||||
"Włącz to urządzenie jako serwer przekazywania między węzłami. Wymaga "
|
||||
"publicznego IP i otwartego portu UDP na routerze."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Enabled"
|
||||
msgstr "Włączone"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid ""
|
||||
"Enabling this option can reduce memory usage, but it may sacrifice "
|
||||
"some performance (set GOGC=10)."
|
||||
@@ -268,23 +268,23 @@ msgstr ""
|
||||
"Włączenie tej opcji może zmniejszyć użycie pamięci, ale może to "
|
||||
"wpłynąć na wydajność (ustawia GOGC=10)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:787
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:827
|
||||
msgid "Error"
|
||||
msgstr "Błąd"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
msgid "Error caching DERP region map: %s"
|
||||
msgstr "Błąd buforowania mapy regionu DERP: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
msgid "Error fetching DERP region map: %s"
|
||||
msgstr "Błąd pobierania mapy regionu DERP: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
msgid "Error reading cached DERP region map: %s"
|
||||
msgstr "Błąd odczytywania buforowanej mapy regionu DERP: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:685
|
||||
msgid ""
|
||||
"Essential configuration for Subnet Routing (Site-to-Site) and Exit "
|
||||
"Node features."
|
||||
@@ -292,12 +292,12 @@ msgstr ""
|
||||
"Podstawowa konfiguracja dla funkcji routingu podsieci (Site-to-Site) "
|
||||
"i węzła wyjścia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid "Exit Node"
|
||||
msgstr "Węzeł wyjścia"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid ""
|
||||
"Expose a web interface on port 5252 for managing this node over "
|
||||
"Tailscale."
|
||||
@@ -305,64 +305,64 @@ msgstr ""
|
||||
"Udostępnij interfejs webowy na porcie 5252 do zarządzania tym węzłem "
|
||||
"przez Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
msgid "Failed to configure firewall: %s"
|
||||
msgstr "Nie udało się skonfigurować zapory: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:788
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:828
|
||||
msgid "Failed to get login URL. You may close this tab."
|
||||
msgstr "Nie udało się uzyskać URL logowania. Możesz zamknąć tę kartę."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
msgid "Failed to get login URL: %s"
|
||||
msgstr "Nie udało się uzyskać URL logowania: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Failed to load logs: %s"
|
||||
msgstr "Nie udało się załadować logów: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:487
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:547
|
||||
msgid "Filter peers by name, IP, or OS..."
|
||||
msgstr "Filtruj węzły po nazwie, IP lub systemie operacyjnym..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:504
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:564
|
||||
msgid "Filter:"
|
||||
msgstr "Filtruj:"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid "Firewall Mode"
|
||||
msgstr "Tryb zapory"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:716
|
||||
msgid "Firewall configuration already applied."
|
||||
msgstr "Konfiguracja zapory jest już zastosowana."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:159
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:219
|
||||
msgid "Firewall configuration applied."
|
||||
msgstr "Zastosowano konfigurację zapory."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:165
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:225
|
||||
msgid "Firewall reload failed"
|
||||
msgstr "Nie udało się ponownie załadować zapory"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:600
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:640
|
||||
msgid "General Settings"
|
||||
msgstr "Ustawienia ogólne"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:509
|
||||
msgid "Hostname"
|
||||
msgstr "Nazwa hosta"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:706
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:746
|
||||
msgid "How to enable Exit Node?"
|
||||
msgstr "Jak włączyć węzeł wyjścia?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
msgid "How to enable Site-to-Site?"
|
||||
msgstr "Jak włączyć Site-to-Site?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:730
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
msgid ""
|
||||
"If the timeout is displayed, you can refresh the page and click Login "
|
||||
"again."
|
||||
@@ -370,7 +370,7 @@ msgstr ""
|
||||
"Jeśli wyświetlany jest komunikat o przekroczeniu limitu czasu, możesz "
|
||||
"odświeżyć stronę i kliknąć Zaloguj ponownie."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:744
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:784
|
||||
msgid ""
|
||||
"If you are using custom login server but not providing an Auth Key, "
|
||||
"will redirect to the login page without pre-filling the key."
|
||||
@@ -379,15 +379,15 @@ msgstr ""
|
||||
"podajesz klucza autoryzacji, nastąpi przekierowanie do strony "
|
||||
"logowania bez wypełniania klucza."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:215
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
msgid "Invalid Date"
|
||||
msgstr "Nieprawidłowa data"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
msgid "Invalid response from server."
|
||||
msgstr "Nieprawidłowa odpowiedź z serwera."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:646
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:686
|
||||
msgid ""
|
||||
"It creates the tailscale interface, adds it to a firewall zone, and "
|
||||
"sets up forwarding between LAN and Tailscale, plus Tailscale to WAN."
|
||||
@@ -396,53 +396,53 @@ msgstr ""
|
||||
"przekazywanie między sieciami LAN i Tailscale oraz z Tailscale do "
|
||||
"sieci WAN."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:218
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:278
|
||||
msgid "Just now"
|
||||
msgstr "Przed chwilą"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:330
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:390
|
||||
msgid "LOGGED OUT"
|
||||
msgstr "WYLOGOWANO"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:455
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:515
|
||||
msgid "Last Seen"
|
||||
msgstr "Ostatnia aktywność"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:776
|
||||
msgid "Leave blank for default Tailscale control plane."
|
||||
msgstr "Pozostaw puste dla domyślnego panelu kontrolnego Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:853
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:893
|
||||
msgid "Loading logs"
|
||||
msgstr "Ładowanie logów"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Logging out..."
|
||||
msgstr "Wylogowywanie..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
msgid "Login"
|
||||
msgstr "Zaloguj"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:749
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:815
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:823
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:855
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:863
|
||||
msgid "Logout"
|
||||
msgstr "Wyloguj"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
msgid "Logout failed: %s"
|
||||
msgstr "Wylogowanie nie powiodło się: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:836
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:876
|
||||
msgid "Logs"
|
||||
msgstr "Logi"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "MagicDNS: Tailscale overrides resolv.conf."
|
||||
msgstr "MagicDNS: Tailscale nadpisuje resolv.conf."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:648
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
msgid ""
|
||||
"Masquerading and MSS Clamping (MTU fix) are enabled to keep "
|
||||
"connections stable."
|
||||
@@ -450,62 +450,62 @@ msgstr ""
|
||||
"Maskowanie i MSS Clamping (korekta MTU) są włączone, aby połączenia "
|
||||
"pozostały stabilne."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:212
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
msgid "N/A"
|
||||
msgstr "Niedostępne"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:341
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:401
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "NIE DZIAŁA"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:439
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:499
|
||||
msgid "No matching peer devices found."
|
||||
msgstr "Nie znaleziono pasujących urządzeń partnerskich."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:460
|
||||
msgid "No peer devices found."
|
||||
msgstr "Nie znaleziono urządzeń partnerskich."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:368
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:428
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:880
|
||||
msgid "No tailscale-related logs found."
|
||||
msgstr "Nie znaleziono logów związanych z Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:613
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:653
|
||||
msgid "None"
|
||||
msgstr "Brak"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:213
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:273
|
||||
msgid "Now"
|
||||
msgstr "Teraz"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:451
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:511
|
||||
msgid "OS"
|
||||
msgstr "System operacyjny"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Offline"
|
||||
msgstr "Offline"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Online"
|
||||
msgstr "Online"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward"
|
||||
msgstr "Przekazywanie OpenWrt"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward: MagicDNS via dnsmasq forwarding.(Only support ts.net)"
|
||||
msgstr ""
|
||||
"Przekazywanie OpenWrt: MagicDNS przez przekazywanie dnsmasq. "
|
||||
"(Obsługuje tylko ts.net)"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:39
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
msgid "Operation"
|
||||
msgstr "Operacja"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:775
|
||||
msgid ""
|
||||
"Optional: Specify a custom control server URL (e.g., a Headscale "
|
||||
"instance, %s)."
|
||||
@@ -513,7 +513,7 @@ msgstr ""
|
||||
"Opcjonalne: Podaj niestandardowy URL serwera kontrolnego (np. "
|
||||
"instancja Headscale, %s)."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:743
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:783
|
||||
msgid ""
|
||||
"Optional: Specify an authentication key for the custom control "
|
||||
"server. Leave blank if not required."
|
||||
@@ -521,48 +521,48 @@ msgstr ""
|
||||
"Opcjonalne: Podaj klucz autoryzacji dla niestandardowego serwera "
|
||||
"kontrolnego. Pozostaw puste, jeśli nie jest wymagany."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:604
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
msgid "Peer Relay Port"
|
||||
msgstr "Port przekazywania między węzłami"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:392
|
||||
msgid "Please use the login button in the settings below to authenticate."
|
||||
msgstr ""
|
||||
"Użyj przycisku logowania w ustawieniach poniżej, aby się "
|
||||
"uwierzytelnić."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Please wait."
|
||||
msgstr "Proszę czekać."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "RUNNING"
|
||||
msgstr "DZIAŁA"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:453
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:513
|
||||
msgid "RX"
|
||||
msgstr "Odbieranie"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:845
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:885
|
||||
msgid "Refresh"
|
||||
msgstr "Odśwież"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:177
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:237
|
||||
msgid "Reloading firewall..."
|
||||
msgstr "Ponowne ładowanie zapory..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
msgid "Requesting Login URL..."
|
||||
msgstr "Pobieranie URL logowania..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:809
|
||||
msgid "Requesting Tailscale login URL... Please wait."
|
||||
msgstr "Pobieranie URL logowania Tailscale... Proszę czekać."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid ""
|
||||
"Select an exit node from the list. If enabled, Allow LAN Access is "
|
||||
"enabled implicitly."
|
||||
@@ -570,7 +570,7 @@ msgstr ""
|
||||
"Wybierz węzeł wyjścia z listy. Jeśli włączony, dostęp do LAN jest "
|
||||
"automatycznie włączony."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid ""
|
||||
"Select the firewall backend for Tailscale to use. Requires service "
|
||||
"restart to take effect."
|
||||
@@ -578,14 +578,14 @@ msgstr ""
|
||||
"Wybierz mechanizm zapory dla Tailscale. Wymaga restartu usługi, aby "
|
||||
"zmiany zaczęły obowiązywać."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:320
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:328
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:340
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:380
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:388
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "Service Status"
|
||||
msgstr "Status usługi"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid ""
|
||||
"Set a custom MTU for the Tailscale daemon. Leave blank to use the "
|
||||
"default value."
|
||||
@@ -593,60 +593,60 @@ msgstr ""
|
||||
"Ustaw niestandardowe MTU dla demona Tailscale. Pozostaw puste, aby "
|
||||
"użyć wartości domyślnej."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid "Shields Up"
|
||||
msgstr "Blokuj połączenia przychodzące"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:448
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:508
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:817
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:857
|
||||
msgid "Successfully logged out."
|
||||
msgstr "Pomyślnie wylogowano."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:321
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:381
|
||||
msgid "TAILSCALE NOT FOUND"
|
||||
msgstr "NIE ZNALEZIONO TAILSCALE"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "TUN Mode"
|
||||
msgstr "Tryb TUN"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:454
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:514
|
||||
msgid "TX"
|
||||
msgstr "Wysyłanie"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:354
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:414
|
||||
msgid "Tailnet Name"
|
||||
msgstr "Nazwa Tailnet"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
#: luci-app-tailscale-community/root/usr/share/luci/menu.d/luci-app-tailscale-community.json:1
|
||||
msgid "Tailscale"
|
||||
msgstr "Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:297
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:357
|
||||
msgid "Tailscale Health Check: %s"
|
||||
msgstr "Kontrola stanu Tailscale: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:450
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:510
|
||||
msgid "Tailscale IP"
|
||||
msgstr "IP Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:352
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:412
|
||||
msgid "Tailscale IPv4"
|
||||
msgstr "IPv4 Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:353
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:413
|
||||
msgid "Tailscale IPv6"
|
||||
msgstr "IPv6 Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:808
|
||||
msgid "Tailscale Login"
|
||||
msgstr "Logowanie Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
msgid ""
|
||||
"Tailscale is a mesh VPN solution that makes it easy to connect your "
|
||||
"devices securely. This configuration page allows you to manage "
|
||||
@@ -656,11 +656,11 @@ msgstr ""
|
||||
"urządzeń. Ta strona konfiguracyjna pozwala zarządzać ustawieniami "
|
||||
"Tailscale na urządzeniu OpenWrt."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:389
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
msgid "Tailscale status error"
|
||||
msgstr "Błąd statusu Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:647
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:687
|
||||
msgid ""
|
||||
"The Tailscale to WAN forwarding is what lets clients send their "
|
||||
"internet traffic through this device as an Exit Node."
|
||||
@@ -668,11 +668,11 @@ msgstr ""
|
||||
"Przekazywanie z Tailscale do sieci WAN pozwala klientom wysyłać ruch "
|
||||
"internetowy przez to urządzenie jako węzeł wyjścia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:810
|
||||
msgid "This can take up to 30 seconds."
|
||||
msgstr "Może to potrwać do 30 sekund."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:800
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
msgid ""
|
||||
"This will disconnect this device from your Tailnet and require you to "
|
||||
"re-authenticate."
|
||||
@@ -680,12 +680,12 @@ msgstr ""
|
||||
"Spowoduje to rozłączenie tego urządzenia z Twojego Tailnet i wymaga "
|
||||
"ponownego uwierzytelnienia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:143
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:194
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:203
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:254
|
||||
msgid "Timed out waiting for the firewall reload"
|
||||
msgstr "Upłynął limit czasu oczekiwania na ponowne załadowanie zapory"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:605
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
msgid ""
|
||||
"UDP port for the Peer Relay service. Open this port on your router "
|
||||
"firewall/NAT."
|
||||
@@ -693,21 +693,21 @@ msgstr ""
|
||||
"Port UDP dla usługi przekazywania między węzłami. Otwórz ten port w "
|
||||
"zaporze/NAT na routerze."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Unknown error"
|
||||
msgstr "Nieznany błąd"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:350
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:410
|
||||
msgid "Version"
|
||||
msgstr "Wersja"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid ""
|
||||
"When enabled, blocks all inbound connections from the Tailscale "
|
||||
"network."
|
||||
@@ -715,13 +715,13 @@ msgstr ""
|
||||
"Po włączeniu blokuje wszystkie połączenia przychodzące z sieci "
|
||||
"Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "When using the exit node, access to the local LAN is allowed."
|
||||
msgstr ""
|
||||
"Podczas korzystania z węzła wyjścia dozwolony jest dostęp do "
|
||||
"lokalnego LAN."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:660
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:700
|
||||
msgid ""
|
||||
"You have unapplied changes. Save & Apply them first so the firewall "
|
||||
"matches the form."
|
||||
@@ -729,7 +729,7 @@ msgstr ""
|
||||
"Masz niezastosowane zmiany. Najpierw je zapisz i zastosuj, aby zapora "
|
||||
"była zgodna z formularzem."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:696
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
msgid ""
|
||||
"[Important] Log in to the Tailscale admin console and manually enable "
|
||||
"\"Subnet Routes\" for this device."
|
||||
@@ -737,7 +737,7 @@ msgstr ""
|
||||
"[Ważne] Zaloguj się do panelu administracyjnego Tailscale i ręcznie "
|
||||
"włącz \"Trasy podsieci\" dla tego urządzenia."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:719
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:759
|
||||
msgid ""
|
||||
"[Important] Step 3 cannot be done here: it needs your Tailscale "
|
||||
"account."
|
||||
@@ -745,7 +745,7 @@ msgstr ""
|
||||
"[Ważne] Kroku 3 nie można wykonać tutaj: wymaga Twojego konta "
|
||||
"Tailscale."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:221
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:281
|
||||
msgid "ago"
|
||||
msgstr "temu"
|
||||
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:47
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
msgid "%s failed"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid "(Experimental) Reduce Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:711
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
msgid "1. Enable \"Advertise Exit Node\"."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:693
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:733
|
||||
msgid "1. Select \"Accept Routes\" (to access remote devices)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:712
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:752
|
||||
msgid ""
|
||||
"2. Click \"Auto Configure Firewall\" (it forwards Tailscale traffic "
|
||||
"to WAN)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:694
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
msgid ""
|
||||
"2. In \"Advertise Routes\", select your local subnet (to allow remote "
|
||||
"devices to access this LAN)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:695
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
msgid "3. Click \"Auto Configure Firewall\" (to allow traffic forwarding)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:753
|
||||
msgid ""
|
||||
"3. In the Tailscale admin console, edit this device under the route "
|
||||
"settings and approve it as an Exit Node."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:718
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:758
|
||||
msgid "4. On the client, set this device as its exit node."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Accept Routes"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:725
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:765
|
||||
msgid "Account Settings"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Advertise Exit Node"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid "Advertise Routes"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid ""
|
||||
"Advertise subnet routes behind this device. Select from the detected "
|
||||
"subnets below or enter custom routes (comma-separated)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "Allow LAN Access"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Allow accepting routes announced by other nodes."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Allow connecting to this device through the SSH function of Tailscale."
|
||||
msgstr ""
|
||||
|
||||
@@ -81,596 +81,596 @@ msgstr ""
|
||||
msgid "Allow user access to tailscale"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:170
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:230
|
||||
msgid "Another firewall reload is already running"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:799
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:839
|
||||
msgid "Are you sure you want to log out?"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:684
|
||||
msgid "Auto Configure Firewall"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:806
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:846
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:750
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:790
|
||||
msgid "Click to Log out account on this device."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:729
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
msgid "Click to get a login URL for this device."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:291
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:383
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:591
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:850
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:443
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:631
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:890
|
||||
msgid "Collecting data ..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:680
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:720
|
||||
msgid ""
|
||||
"Configuration committed, reloading network and firewall. This can "
|
||||
"take a moment."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:673
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
msgid "Configuring firewall"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:826
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:866
|
||||
msgid "Confirm Logout"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:452
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:512
|
||||
msgid "Connection Info"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Controls how Tailscale DNS is handled."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:762
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:802
|
||||
msgid ""
|
||||
"Could not open a new tab. Please check if your browser or an "
|
||||
"extension blocked the pop-up."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:774
|
||||
msgid "Custom Login Server"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:742
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:782
|
||||
msgid "Custom Login Server Auth Key"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "DNS Mode"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid "Daemon MTU"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:865
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:905
|
||||
msgid "Daemon Settings"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Declare this device as an Exit Node."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:869
|
||||
msgid "Devices List"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Firewall Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid "Disable SNAT"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid ""
|
||||
"Disable Source NAT (SNAT) for traffic to advertised routes. Most "
|
||||
"users should leave this unchecked."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Tailscale netfilter auto-configuration (--netfilter-mode=off)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Disabled: system DNS only."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:791
|
||||
msgid "Disconnect from Tailscale and expire current node key."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:41
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
msgid "Empty reply from server"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid "Enable Peer Relay"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Enable Tailscale SSH"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid "Enable Tailscale Service"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid "Enable Web Interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid ""
|
||||
"Enable or disable the Tailscale service. When disabled, the service "
|
||||
"will be stopped and the process will be killed."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid ""
|
||||
"Enable this device as a Peer Relay server. Requires a public IP and "
|
||||
"an UDP port open on the router."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid ""
|
||||
"Enabling this option can reduce memory usage, but it may sacrifice "
|
||||
"some performance (set GOGC=10)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:787
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:827
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
msgid "Error caching DERP region map: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
msgid "Error fetching DERP region map: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
msgid "Error reading cached DERP region map: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:685
|
||||
msgid ""
|
||||
"Essential configuration for Subnet Routing (Site-to-Site) and Exit "
|
||||
"Node features."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid "Exit Node"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid ""
|
||||
"Expose a web interface on port 5252 for managing this node over "
|
||||
"Tailscale."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
msgid "Failed to configure firewall: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:788
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:828
|
||||
msgid "Failed to get login URL. You may close this tab."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
msgid "Failed to get login URL: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Failed to load logs: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:487
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:547
|
||||
msgid "Filter peers by name, IP, or OS..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:504
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:564
|
||||
msgid "Filter:"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid "Firewall Mode"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:716
|
||||
msgid "Firewall configuration already applied."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:159
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:219
|
||||
msgid "Firewall configuration applied."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:165
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:225
|
||||
msgid "Firewall reload failed"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:600
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:640
|
||||
msgid "General Settings"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:509
|
||||
msgid "Hostname"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:706
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:746
|
||||
msgid "How to enable Exit Node?"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
msgid "How to enable Site-to-Site?"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:730
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
msgid ""
|
||||
"If the timeout is displayed, you can refresh the page and click Login "
|
||||
"again."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:744
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:784
|
||||
msgid ""
|
||||
"If you are using custom login server but not providing an Auth Key, "
|
||||
"will redirect to the login page without pre-filling the key."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:215
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
msgid "Invalid Date"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
msgid "Invalid response from server."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:646
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:686
|
||||
msgid ""
|
||||
"It creates the tailscale interface, adds it to a firewall zone, and "
|
||||
"sets up forwarding between LAN and Tailscale, plus Tailscale to WAN."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:218
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:278
|
||||
msgid "Just now"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:330
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:390
|
||||
msgid "LOGGED OUT"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:455
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:515
|
||||
msgid "Last Seen"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:776
|
||||
msgid "Leave blank for default Tailscale control plane."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:853
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:893
|
||||
msgid "Loading logs"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Logging out..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:749
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:815
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:823
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:855
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:863
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
msgid "Logout failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:836
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:876
|
||||
msgid "Logs"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "MagicDNS: Tailscale overrides resolv.conf."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:648
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
msgid ""
|
||||
"Masquerading and MSS Clamping (MTU fix) are enabled to keep "
|
||||
"connections stable."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:212
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:341
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:401
|
||||
msgid "NOT RUNNING"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:439
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:499
|
||||
msgid "No matching peer devices found."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:460
|
||||
msgid "No peer devices found."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:368
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:428
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:880
|
||||
msgid "No tailscale-related logs found."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:613
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:653
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:213
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:273
|
||||
msgid "Now"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:451
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:511
|
||||
msgid "OS"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Offline"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Online"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward: MagicDNS via dnsmasq forwarding.(Only support ts.net)"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:39
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
msgid "Operation"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:775
|
||||
msgid ""
|
||||
"Optional: Specify a custom control server URL (e.g., a Headscale "
|
||||
"instance, %s)."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:743
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:783
|
||||
msgid ""
|
||||
"Optional: Specify an authentication key for the custom control "
|
||||
"server. Leave blank if not required."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:604
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
msgid "Peer Relay Port"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:392
|
||||
msgid "Please use the login button in the settings below to authenticate."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Please wait."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "RUNNING"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:453
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:513
|
||||
msgid "RX"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:845
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:885
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:177
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:237
|
||||
msgid "Reloading firewall..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
msgid "Requesting Login URL..."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:809
|
||||
msgid "Requesting Tailscale login URL... Please wait."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid ""
|
||||
"Select an exit node from the list. If enabled, Allow LAN Access is "
|
||||
"enabled implicitly."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid ""
|
||||
"Select the firewall backend for Tailscale to use. Requires service "
|
||||
"restart to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:320
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:328
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:340
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:380
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:388
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "Service Status"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid ""
|
||||
"Set a custom MTU for the Tailscale daemon. Leave blank to use the "
|
||||
"default value."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid "Shields Up"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:448
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:508
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:817
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:857
|
||||
msgid "Successfully logged out."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:321
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:381
|
||||
msgid "TAILSCALE NOT FOUND"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "TUN Mode"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:454
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:514
|
||||
msgid "TX"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:354
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:414
|
||||
msgid "Tailnet Name"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
#: luci-app-tailscale-community/root/usr/share/luci/menu.d/luci-app-tailscale-community.json:1
|
||||
msgid "Tailscale"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:297
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:357
|
||||
msgid "Tailscale Health Check: %s"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:450
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:510
|
||||
msgid "Tailscale IP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:352
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:412
|
||||
msgid "Tailscale IPv4"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:353
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:413
|
||||
msgid "Tailscale IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:808
|
||||
msgid "Tailscale Login"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
msgid ""
|
||||
"Tailscale is a mesh VPN solution that makes it easy to connect your "
|
||||
"devices securely. This configuration page allows you to manage "
|
||||
"Tailscale settings on your OpenWrt device."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:389
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
msgid "Tailscale status error"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:647
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:687
|
||||
msgid ""
|
||||
"The Tailscale to WAN forwarding is what lets clients send their "
|
||||
"internet traffic through this device as an Exit Node."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:810
|
||||
msgid "This can take up to 30 seconds."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:800
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
msgid ""
|
||||
"This will disconnect this device from your Tailnet and require you to "
|
||||
"re-authenticate."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:143
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:194
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:203
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:254
|
||||
msgid "Timed out waiting for the firewall reload"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:605
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
msgid ""
|
||||
"UDP port for the Peer Relay service. Open this port on your router "
|
||||
"firewall/NAT."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:350
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:410
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid ""
|
||||
"When enabled, blocks all inbound connections from the Tailscale "
|
||||
"network."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "When using the exit node, access to the local LAN is allowed."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:660
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:700
|
||||
msgid ""
|
||||
"You have unapplied changes. Save & Apply them first so the firewall "
|
||||
"matches the form."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:696
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
msgid ""
|
||||
"[Important] Log in to the Tailscale admin console and manually enable "
|
||||
"\"Subnet Routes\" for this device."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:719
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:759
|
||||
msgid ""
|
||||
"[Important] Step 3 cannot be done here: it needs your Tailscale "
|
||||
"account."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:221
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:281
|
||||
msgid "ago"
|
||||
msgstr ""
|
||||
@@ -1,79 +1,79 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:47
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
msgid "%s failed"
|
||||
msgstr "%s失败"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid "(Experimental) Reduce Memory Usage"
|
||||
msgstr "(实验性) 减少内存使用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:711
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
msgid "1. Enable \"Advertise Exit Node\"."
|
||||
msgstr "1. 勾选 \"通告出口节点\"。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:693
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:733
|
||||
msgid "1. Select \"Accept Routes\" (to access remote devices)."
|
||||
msgstr "1. 勾选 \"接受路由\" (以访问远程设备)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:712
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:752
|
||||
msgid ""
|
||||
"2. Click \"Auto Configure Firewall\" (it forwards Tailscale traffic "
|
||||
"to WAN)."
|
||||
msgstr "2. 点击 \"自动配置防火墙\" (它会将 Tailscale 流量转发到 WAN)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:694
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
msgid ""
|
||||
"2. In \"Advertise Routes\", select your local subnet (to allow remote "
|
||||
"devices to access this LAN)."
|
||||
msgstr "2. 在 \"通告路由\" 中选择本地子网 (让远程设备能访问本局域网)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:695
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
msgid "3. Click \"Auto Configure Firewall\" (to allow traffic forwarding)."
|
||||
msgstr "3. 点击 \"自动配置防火墙\" (打通防火墙转发)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:753
|
||||
msgid ""
|
||||
"3. In the Tailscale admin console, edit this device under the route "
|
||||
"settings and approve it as an Exit Node."
|
||||
msgstr "3. 在 Tailscale 管理控制台的路由设置中编辑此设备,并批准其为出口节点。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:718
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:758
|
||||
msgid "4. On the client, set this device as its exit node."
|
||||
msgstr "4. 在客户端上,将此设备设为出口节点。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Accept Routes"
|
||||
msgstr "接受路由"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:725
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:765
|
||||
msgid "Account Settings"
|
||||
msgstr "账户设置"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Advertise Exit Node"
|
||||
msgstr "通告出口节点"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid "Advertise Routes"
|
||||
msgstr "通告路由"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid ""
|
||||
"Advertise subnet routes behind this device. Select from the detected "
|
||||
"subnets below or enter custom routes (comma-separated)."
|
||||
msgstr "通告此设备后的子网路由。从下面的子网中选择,或输入自定义路由 (逗号分隔)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "Allow LAN Access"
|
||||
msgstr "允许访问局域网"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Allow accepting routes announced by other nodes."
|
||||
msgstr "允许接受由其他节点通告的路由。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Allow connecting to this device through the SSH function of Tailscale."
|
||||
msgstr "允许通过 Tailscale 的 SSH 功能连接到此设备。"
|
||||
|
||||
@@ -81,277 +81,277 @@ msgstr "允许通过 Tailscale 的 SSH 功能连接到此设备。"
|
||||
msgid "Allow user access to tailscale"
|
||||
msgstr "允许用户访问 Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:170
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:230
|
||||
msgid "Another firewall reload is already running"
|
||||
msgstr "另一个防火墙重新加载任务正在进行中"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:799
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:839
|
||||
msgid "Are you sure you want to log out?"
|
||||
msgstr "您确定要登出吗?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:684
|
||||
msgid "Auto Configure Firewall"
|
||||
msgstr "自动配置防火墙"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:806
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:846
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:750
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:790
|
||||
msgid "Click to Log out account on this device."
|
||||
msgstr "点击以登出此设备上的账户。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:729
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
msgid "Click to get a login URL for this device."
|
||||
msgstr "点击获取此设备的登录 URL。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:291
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:383
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:591
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:850
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:443
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:631
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:890
|
||||
msgid "Collecting data ..."
|
||||
msgstr "正在收集数据..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:680
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:720
|
||||
msgid ""
|
||||
"Configuration committed, reloading network and firewall. This can "
|
||||
"take a moment."
|
||||
msgstr "配置已提交,正在重新加载网络和防火墙。这可能需要一点时间。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:673
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
msgid "Configuring firewall"
|
||||
msgstr "正在配置防火墙"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:826
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:866
|
||||
msgid "Confirm Logout"
|
||||
msgstr "确认登出"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:452
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:512
|
||||
msgid "Connection Info"
|
||||
msgstr "连接信息"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Controls how Tailscale DNS is handled."
|
||||
msgstr "控制 Tailscale DNS 的处理方式。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:762
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:802
|
||||
msgid ""
|
||||
"Could not open a new tab. Please check if your browser or an "
|
||||
"extension blocked the pop-up."
|
||||
msgstr "无法打开新标签页。请检查您的浏览器或扩展程序是否阻止了弹出窗口。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:774
|
||||
msgid "Custom Login Server"
|
||||
msgstr "自定义登录服务器"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:742
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:782
|
||||
msgid "Custom Login Server Auth Key"
|
||||
msgstr "自定义登录服务器认证密钥"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "DNS Mode"
|
||||
msgstr "DNS 模式"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid "Daemon MTU"
|
||||
msgstr "守护进程 MTU"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:865
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:905
|
||||
msgid "Daemon Settings"
|
||||
msgstr "守护进程设置"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Declare this device as an Exit Node."
|
||||
msgstr "将此设备声明为出口节点。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:869
|
||||
msgid "Devices List"
|
||||
msgstr "设备列表"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Firewall Configuration"
|
||||
msgstr "禁用防火墙配置"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid "Disable SNAT"
|
||||
msgstr "禁用 SNAT"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid ""
|
||||
"Disable Source NAT (SNAT) for traffic to advertised routes. Most "
|
||||
"users should leave this unchecked."
|
||||
msgstr "为通告路由的流量禁用源地址转换 (SNAT)。大多数用户应保持此项不勾选。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Tailscale netfilter auto-configuration (--netfilter-mode=off)."
|
||||
msgstr "禁用 Tailscale netfilter 自动配置 (--netfilter-mode=off)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Disabled"
|
||||
msgstr "已禁用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Disabled: system DNS only."
|
||||
msgstr "已禁用:仅使用系统 DNS。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:791
|
||||
msgid "Disconnect from Tailscale and expire current node key."
|
||||
msgstr "从 Tailscale 断开连接并使当前节点密钥过期。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:41
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
msgid "Empty reply from server"
|
||||
msgstr "服务器返回空响应"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid "Enable Peer Relay"
|
||||
msgstr "启用节点中继"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Enable Tailscale SSH"
|
||||
msgstr "启用 Tailscale SSH"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid "Enable Tailscale Service"
|
||||
msgstr "启用 Tailscale 服务"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid "Enable Web Interface"
|
||||
msgstr "启用 Web 界面"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid ""
|
||||
"Enable or disable the Tailscale service. When disabled, the service "
|
||||
"will be stopped and the process will be killed."
|
||||
msgstr "启用或禁用Tailscale服务。禁用后,服务将被停止,当前进程将被终止。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid ""
|
||||
"Enable this device as a Peer Relay server. Requires a public IP and "
|
||||
"an UDP port open on the router."
|
||||
msgstr "将此设备设为节点中继服务器。需要此路由器具备公网 IP,并在路由器上开放一个 UDP 端口。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Enabled"
|
||||
msgstr "已启用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid ""
|
||||
"Enabling this option can reduce memory usage, but it may sacrifice "
|
||||
"some performance (set GOGC=10)."
|
||||
msgstr "启用此选项可以减少内存使用,但可能会牺牲一些性能 (设置 GOGC=10)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:787
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:827
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
msgid "Error caching DERP region map: %s"
|
||||
msgstr "缓存 DERP 区域地图时出错: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
msgid "Error fetching DERP region map: %s"
|
||||
msgstr "获取 DERP 区域地图时出错: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
msgid "Error reading cached DERP region map: %s"
|
||||
msgstr "读取缓存的 DERP 区域地图时出错: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:685
|
||||
msgid ""
|
||||
"Essential configuration for Subnet Routing (Site-to-Site) and Exit "
|
||||
"Node features."
|
||||
msgstr "子网路由(局域网间互通)和出口节点的基本配置。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid "Exit Node"
|
||||
msgstr "出口节点"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid ""
|
||||
"Expose a web interface on port 5252 for managing this node over "
|
||||
"Tailscale."
|
||||
msgstr "在端口 5252 上暴露一个 Web 界面,用于通过 Tailscale 管理此节点。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
msgid "Failed to configure firewall: %s"
|
||||
msgstr "配置防火墙失败: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:788
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:828
|
||||
msgid "Failed to get login URL. You may close this tab."
|
||||
msgstr "获取登录 URL 失败。您可以关闭此标签页。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
msgid "Failed to get login URL: %s"
|
||||
msgstr "获取登录 URL 失败: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Failed to load logs: %s"
|
||||
msgstr "加载日志失败: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:487
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:547
|
||||
msgid "Filter peers by name, IP, or OS..."
|
||||
msgstr "按名称、IP 或操作系统过滤..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:504
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:564
|
||||
msgid "Filter:"
|
||||
msgstr "过滤:"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid "Firewall Mode"
|
||||
msgstr "防火墙模式"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:716
|
||||
msgid "Firewall configuration already applied."
|
||||
msgstr "防火墙配置已应用。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:159
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:219
|
||||
msgid "Firewall configuration applied."
|
||||
msgstr "已应用防火墙配置"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:165
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:225
|
||||
msgid "Firewall reload failed"
|
||||
msgstr "重新加载防火墙失败"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:600
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:640
|
||||
msgid "General Settings"
|
||||
msgstr "常规设置"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:509
|
||||
msgid "Hostname"
|
||||
msgstr "主机名"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:706
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:746
|
||||
msgid "How to enable Exit Node?"
|
||||
msgstr "如何启用出口节点?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
msgid "How to enable Site-to-Site?"
|
||||
msgstr "如何实现站点到站点(即多局域网互通)?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:730
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
msgid ""
|
||||
"If the timeout is displayed, you can refresh the page and click Login "
|
||||
"again."
|
||||
msgstr "如果显示超时,您可以刷新页面并再次点击登录。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:744
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:784
|
||||
msgid ""
|
||||
"If you are using custom login server but not providing an Auth Key, "
|
||||
"will redirect to the login page without pre-filling the key."
|
||||
msgstr "如果您使用自定义登录服务器但未提供认证密钥,将重定向到登录页面而不会预先填充密钥。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:215
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
msgid "Invalid Date"
|
||||
msgstr "无效日期"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
msgid "Invalid response from server."
|
||||
msgstr "服务器响应无效。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:646
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:686
|
||||
msgid ""
|
||||
"It creates the tailscale interface, adds it to a firewall zone, and "
|
||||
"sets up forwarding between LAN and Tailscale, plus Tailscale to WAN."
|
||||
@@ -359,241 +359,241 @@ msgstr ""
|
||||
"它会创建 tailscale 接口,将其加入防火墙区域,并设置 LAN 与 Tailscale 之间的转发,以及 Tailscale 到 "
|
||||
"WAN 的转发。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:218
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:278
|
||||
msgid "Just now"
|
||||
msgstr "刚才"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:330
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:390
|
||||
msgid "LOGGED OUT"
|
||||
msgstr "已登出"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:455
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:515
|
||||
msgid "Last Seen"
|
||||
msgstr "上次在线"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:776
|
||||
msgid "Leave blank for default Tailscale control plane."
|
||||
msgstr "留空以使用默认的 Tailscale 控制平面。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:853
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:893
|
||||
msgid "Loading logs"
|
||||
msgstr "正在加载日志"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Logging out..."
|
||||
msgstr "正在登出..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
msgid "Login"
|
||||
msgstr "登录"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:749
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:815
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:823
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:855
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:863
|
||||
msgid "Logout"
|
||||
msgstr "登出"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
msgid "Logout failed: %s"
|
||||
msgstr "登出失败: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:836
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:876
|
||||
msgid "Logs"
|
||||
msgstr "日志"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "MagicDNS: Tailscale overrides resolv.conf."
|
||||
msgstr "MagicDNS:Tailscale 会覆写 resolv.conf。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:648
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
msgid ""
|
||||
"Masquerading and MSS Clamping (MTU fix) are enabled to keep "
|
||||
"connections stable."
|
||||
msgstr "会启用伪装和 MSS Clamping (MTU 修复),以保持连接稳定。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:212
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
msgid "N/A"
|
||||
msgstr "不可用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:341
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:401
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未运行"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:439
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:499
|
||||
msgid "No matching peer devices found."
|
||||
msgstr "未找到匹配的节点设备。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:460
|
||||
msgid "No peer devices found."
|
||||
msgstr "未找到节点设备。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:368
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:428
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:880
|
||||
msgid "No tailscale-related logs found."
|
||||
msgstr "没有找到Tailscale相关日志"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:613
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:653
|
||||
msgid "None"
|
||||
msgstr "无"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:213
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:273
|
||||
msgid "Now"
|
||||
msgstr "现在"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:451
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:511
|
||||
msgid "OS"
|
||||
msgstr "操作系统"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Offline"
|
||||
msgstr "离线"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Online"
|
||||
msgstr "在线"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward"
|
||||
msgstr "OpenWrt 转发"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward: MagicDNS via dnsmasq forwarding.(Only support ts.net)"
|
||||
msgstr "OpenWrt 转发:通过dnsmasq转发MagicDNS(仅支持 ts.net域名)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:39
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
msgid "Operation"
|
||||
msgstr "操作"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:775
|
||||
msgid ""
|
||||
"Optional: Specify a custom control server URL (e.g., a Headscale "
|
||||
"instance, %s)."
|
||||
msgstr "可选:指定一个自定义控制服务器 URL (例如,一个 Headscale 实例, %s)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:743
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:783
|
||||
msgid ""
|
||||
"Optional: Specify an authentication key for the custom control "
|
||||
"server. Leave blank if not required."
|
||||
msgstr "可选:为自定义控制服务器指定一个认证密钥。如果不需要,请留空。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:604
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
msgid "Peer Relay Port"
|
||||
msgstr "节点中继端口"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:392
|
||||
msgid "Please use the login button in the settings below to authenticate."
|
||||
msgstr "请使用下方设置中的登录按钮进行认证。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Please wait."
|
||||
msgstr "请稍候。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "RUNNING"
|
||||
msgstr "正在运行"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:453
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:513
|
||||
msgid "RX"
|
||||
msgstr "接收"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:845
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:885
|
||||
msgid "Refresh"
|
||||
msgstr "刷新"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:177
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:237
|
||||
msgid "Reloading firewall..."
|
||||
msgstr "正在重新加载防火墙..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
msgid "Requesting Login URL..."
|
||||
msgstr "正在请求登录 URL..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:809
|
||||
msgid "Requesting Tailscale login URL... Please wait."
|
||||
msgstr "正在请求 Tailscale 登录 URL... 请稍候。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid ""
|
||||
"Select an exit node from the list. If enabled, Allow LAN Access is "
|
||||
"enabled implicitly."
|
||||
msgstr "从列表中选择出口节点。启用后会同时开启允许局域网访问。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid ""
|
||||
"Select the firewall backend for Tailscale to use. Requires service "
|
||||
"restart to take effect."
|
||||
msgstr "选择 Tailscale 使用的防火墙后端。需要重启服务才能生效。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:320
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:328
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:340
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:380
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:388
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "Service Status"
|
||||
msgstr "服务状态"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid ""
|
||||
"Set a custom MTU for the Tailscale daemon. Leave blank to use the "
|
||||
"default value."
|
||||
msgstr "为 Tailscale 守护进程设置自定义 MTU。留空则使用默认值。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid "Shields Up"
|
||||
msgstr "屏蔽入站连接"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:448
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:508
|
||||
msgid "Status"
|
||||
msgstr "状态"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:817
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:857
|
||||
msgid "Successfully logged out."
|
||||
msgstr "登出成功。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:321
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:381
|
||||
msgid "TAILSCALE NOT FOUND"
|
||||
msgstr "未找到 TAILSCALE 主程序"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "TUN Mode"
|
||||
msgstr "TUN 模式"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:454
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:514
|
||||
msgid "TX"
|
||||
msgstr "发送"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:354
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:414
|
||||
msgid "Tailnet Name"
|
||||
msgstr "Tailnet 名称"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
#: luci-app-tailscale-community/root/usr/share/luci/menu.d/luci-app-tailscale-community.json:1
|
||||
msgid "Tailscale"
|
||||
msgstr "Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:297
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:357
|
||||
msgid "Tailscale Health Check: %s"
|
||||
msgstr "Tailscale 健康检查: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:450
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:510
|
||||
msgid "Tailscale IP"
|
||||
msgstr "Tailscale IP"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:352
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:412
|
||||
msgid "Tailscale IPv4"
|
||||
msgstr "Tailscale IPv4"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:353
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:413
|
||||
msgid "Tailscale IPv6"
|
||||
msgstr "Tailscale IPv6"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:808
|
||||
msgid "Tailscale Login"
|
||||
msgstr "Tailscale 登录"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
msgid ""
|
||||
"Tailscale is a mesh VPN solution that makes it easy to connect your "
|
||||
"devices securely. This configuration page allows you to manage "
|
||||
@@ -602,80 +602,80 @@ msgstr ""
|
||||
"Tailscale 是一个网状 VPN 解决方案,可以轻松地安全连接您的设备。此配置页面允许您在 OpenWrt 设备上管理 "
|
||||
"Tailscale 设置。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:389
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
msgid "Tailscale status error"
|
||||
msgstr "Tailscale 状态异常"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:647
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:687
|
||||
msgid ""
|
||||
"The Tailscale to WAN forwarding is what lets clients send their "
|
||||
"internet traffic through this device as an Exit Node."
|
||||
msgstr "正是 Tailscale 到 WAN 的转发,让客户端可以把上网流量经由此设备作为出口节点发出。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:810
|
||||
msgid "This can take up to 30 seconds."
|
||||
msgstr "此过程最多可能需要 30 秒。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:800
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
msgid ""
|
||||
"This will disconnect this device from your Tailnet and require you to "
|
||||
"re-authenticate."
|
||||
msgstr "这将使此设备从您的 Tailnet 断开连接,并需要您重新进行身份验证。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:143
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:194
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:203
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:254
|
||||
msgid "Timed out waiting for the firewall reload"
|
||||
msgstr "等待防火墙重新加载超时"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:605
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
msgid ""
|
||||
"UDP port for the Peer Relay service. Open this port on your router "
|
||||
"firewall/NAT."
|
||||
msgstr "节点中继服务的 UDP 端口。需要在路由器的防火墙/NAT 上开放该端口。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Unknown error"
|
||||
msgstr "未知错误"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:350
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:410
|
||||
msgid "Version"
|
||||
msgstr "版本"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid ""
|
||||
"When enabled, blocks all inbound connections from the Tailscale "
|
||||
"network."
|
||||
msgstr "启用后,将阻止来自 Tailscale 网络的所有入站连接。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "When using the exit node, access to the local LAN is allowed."
|
||||
msgstr "使用出口节点时,允许访问本地局域网。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:660
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:700
|
||||
msgid ""
|
||||
"You have unapplied changes. Save & Apply them first so the firewall "
|
||||
"matches the form."
|
||||
msgstr "您有未应用的更改。请先保存并应用,让防火墙配置与表单保持一致。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:696
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
msgid ""
|
||||
"[Important] Log in to the Tailscale admin console and manually enable "
|
||||
"\"Subnet Routes\" for this device."
|
||||
msgstr "【重要】登录 Tailscale 管理控制台,手动为此设备启用“子网路由”。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:719
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:759
|
||||
msgid ""
|
||||
"[Important] Step 3 cannot be done here: it needs your Tailscale "
|
||||
"account."
|
||||
msgstr "【重要】第 3 步无法在此完成:需要您的 Tailscale 账户。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:221
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:281
|
||||
msgid "ago"
|
||||
msgstr "前"
|
||||
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:47
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
msgid "%s failed"
|
||||
msgstr "%s 失敗"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid "(Experimental) Reduce Memory Usage"
|
||||
msgstr "(實驗性) 減少記憶體使用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:711
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
msgid "1. Enable \"Advertise Exit Node\"."
|
||||
msgstr "1. 啟用「宣告出口節點」。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:693
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:733
|
||||
msgid "1. Select \"Accept Routes\" (to access remote devices)."
|
||||
msgstr "1. 勾選「接受路由」(以存取遠端設備)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:712
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:752
|
||||
msgid ""
|
||||
"2. Click \"Auto Configure Firewall\" (it forwards Tailscale traffic "
|
||||
"to WAN)."
|
||||
msgstr "2. 點選「自動設定防火牆」(將 Tailscale 流量轉送到 WAN)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:694
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
msgid ""
|
||||
"2. In \"Advertise Routes\", select your local subnet (to allow remote "
|
||||
"devices to access this LAN)."
|
||||
msgstr "2. 在「宣告路由」選擇本裝置的區域網段 (讓遠端能存取這個區網)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:695
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
msgid "3. Click \"Auto Configure Firewall\" (to allow traffic forwarding)."
|
||||
msgstr "3. 點選「自動設定防火牆」(允許流量轉送)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:753
|
||||
msgid ""
|
||||
"3. In the Tailscale admin console, edit this device under the route "
|
||||
"settings and approve it as an Exit Node."
|
||||
msgstr "3. 在 Tailscale 管理控制台的路由設定中編輯此裝置,並核准為出口節點。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:718
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:758
|
||||
msgid "4. On the client, set this device as its exit node."
|
||||
msgstr "4. 在用戶端上,將此裝置設為出口節點。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Accept Routes"
|
||||
msgstr "接受路由"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:725
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:765
|
||||
msgid "Account Settings"
|
||||
msgstr "帳號設定"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Advertise Exit Node"
|
||||
msgstr "宣告出口節點"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid "Advertise Routes"
|
||||
msgstr "宣告路由"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:636
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
msgid ""
|
||||
"Advertise subnet routes behind this device. Select from the detected "
|
||||
"subnets below or enter custom routes (comma-separated)."
|
||||
msgstr "宣告此裝置後方的子網路路由。從下方偵測到的子網路中選擇,或輸入自訂路由 (以逗號分隔)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "Allow LAN Access"
|
||||
msgstr "允許 LAN 存取"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:55
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:78
|
||||
msgid "Allow accepting routes announced by other nodes."
|
||||
msgstr "允許接受由其他節點宣告的路由。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Allow connecting to this device through the SSH function of Tailscale."
|
||||
msgstr "允許透過 Tailscale 的 SSH 功能連線到此裝置。"
|
||||
|
||||
@@ -81,277 +81,277 @@ msgstr "允許透過 Tailscale 的 SSH 功能連線到此裝置。"
|
||||
msgid "Allow user access to tailscale"
|
||||
msgstr "允許使用者存取 Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:170
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:230
|
||||
msgid "Another firewall reload is already running"
|
||||
msgstr "另一個防火牆重新載入作業正在執行中"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:799
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:839
|
||||
msgid "Are you sure you want to log out?"
|
||||
msgstr "您確定要登出嗎?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:684
|
||||
msgid "Auto Configure Firewall"
|
||||
msgstr "自動設定防火牆"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:806
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:846
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:750
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:790
|
||||
msgid "Click to Log out account on this device."
|
||||
msgstr "點選以登出此裝置上的帳號。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:729
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
msgid "Click to get a login URL for this device."
|
||||
msgstr "點選獲取此裝置的登入 URL。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:291
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:383
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:591
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:850
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:443
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:631
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:890
|
||||
msgid "Collecting data ..."
|
||||
msgstr "正在收集資料..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:680
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:720
|
||||
msgid ""
|
||||
"Configuration committed, reloading network and firewall. This can "
|
||||
"take a moment."
|
||||
msgstr "設定已提交,正在重新載入網路與防火牆。這可能需要一點時間。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:673
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:713
|
||||
msgid "Configuring firewall"
|
||||
msgstr "正在設定防火牆"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:826
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:866
|
||||
msgid "Confirm Logout"
|
||||
msgstr "確認登出"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:452
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:512
|
||||
msgid "Connection Info"
|
||||
msgstr "連線資訊"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Controls how Tailscale DNS is handled."
|
||||
msgstr "控制 Tailscale DNS 的處理方式。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:762
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:802
|
||||
msgid ""
|
||||
"Could not open a new tab. Please check if your browser or an "
|
||||
"extension blocked the pop-up."
|
||||
msgstr "無法開啟新分頁。請檢查您的瀏覽器或擴充套件程式是否阻止了彈出式視窗。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:734
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:774
|
||||
msgid "Custom Login Server"
|
||||
msgstr "自訂登入伺服器"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:742
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:782
|
||||
msgid "Custom Login Server Auth Key"
|
||||
msgstr "自訂登入伺服器認證金鑰"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "DNS Mode"
|
||||
msgstr "DNS 模式"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid "Daemon MTU"
|
||||
msgstr "常駐程式 MTU"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:865
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:905
|
||||
msgid "Daemon Settings"
|
||||
msgstr "常駐程式設定"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:56
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:79
|
||||
msgid "Declare this device as an Exit Node."
|
||||
msgstr "將此裝置宣告為出口節點。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:869
|
||||
msgid "Devices List"
|
||||
msgstr "裝置清單"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Firewall Configuration"
|
||||
msgstr "停用防火牆設定"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid "Disable SNAT"
|
||||
msgstr "停用 SNAT"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:59
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:82
|
||||
msgid ""
|
||||
"Disable Source NAT (SNAT) for traffic to advertised routes. Most "
|
||||
"users should leave this unchecked."
|
||||
msgstr "為宣告路由的流量停用來源位址轉換 (SNAT)。大多數使用者不應勾選此項。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:63
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:86
|
||||
msgid "Disable Tailscale netfilter auto-configuration (--netfilter-mode=off)."
|
||||
msgstr "停用 Tailscale netfilter 自動設定 (--netfilter-mode=off)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Disabled"
|
||||
msgstr "已停用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "Disabled: system DNS only."
|
||||
msgstr "已停用: 僅使用系統 DNS。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:751
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:791
|
||||
msgid "Disconnect from Tailscale and expire current node key."
|
||||
msgstr "中斷 Tailscale 連線並使目前節點金鑰過期。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:41
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
msgid "Empty reply from server"
|
||||
msgstr "伺服器回應為空"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid "Enable Peer Relay"
|
||||
msgstr "啟用對等中繼"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:61
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:84
|
||||
msgid "Enable Tailscale SSH"
|
||||
msgstr "啟用 Tailscale SSH"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid "Enable Tailscale Service"
|
||||
msgstr "啟用 Tailscale 服務"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid "Enable Web Interface"
|
||||
msgstr "啟用 Web 介面"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:53
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:76
|
||||
msgid ""
|
||||
"Enable or disable the Tailscale service. When disabled, the service "
|
||||
"will be stopped and the process will be killed."
|
||||
msgstr "啟用或停用 Tailscale 服務。停用後,該服務將停止,處理程序將被終止。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:64
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:87
|
||||
msgid ""
|
||||
"Enable this device as a Peer Relay server. Requires a public IP and "
|
||||
"an UDP port open on the router."
|
||||
msgstr "將此設備做為對等中繼伺服器。需要公開 IP 位址,且路由器上需要開啟一個 UDP 連接埠。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "Enabled"
|
||||
msgstr "已啟用"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:71
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:94
|
||||
msgid ""
|
||||
"Enabling this option can reduce memory usage, but it may sacrifice "
|
||||
"some performance (set GOGC=10)."
|
||||
msgstr "啟用此選項可以減少記憶體使用,但可能會犧牲一些效能 (設定 GOGC=10)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:787
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:827
|
||||
msgid "Error"
|
||||
msgstr "錯誤"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
msgid "Error caching DERP region map: %s"
|
||||
msgstr "快取 DERP 區域對照表時出錯: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
msgid "Error fetching DERP region map: %s"
|
||||
msgstr "獲取 DERP 區域對照表時出錯: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
msgid "Error reading cached DERP region map: %s"
|
||||
msgstr "讀取快取的 DERP 區域對照表時出錯: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:685
|
||||
msgid ""
|
||||
"Essential configuration for Subnet Routing (Site-to-Site) and Exit "
|
||||
"Node features."
|
||||
msgstr "子網路由(站對站)和出口節點功能的基本設定"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid "Exit Node"
|
||||
msgstr "出口節點"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:58
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:81
|
||||
msgid ""
|
||||
"Expose a web interface on port 5252 for managing this node over "
|
||||
"Tailscale."
|
||||
msgstr "在埠 5252 上暴露一個 Web 介面,用於透過 Tailscale 管理此節點。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
msgid "Failed to configure firewall: %s"
|
||||
msgstr "設定防火牆失敗: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:788
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:828
|
||||
msgid "Failed to get login URL. You may close this tab."
|
||||
msgstr "獲取登入 URL 失敗。您可以關閉此分頁。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
msgid "Failed to get login URL: %s"
|
||||
msgstr "獲取登入 URL 失敗: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Failed to load logs: %s"
|
||||
msgstr "載入日誌失敗: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:487
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:547
|
||||
msgid "Filter peers by name, IP, or OS..."
|
||||
msgstr "依名稱、IP 或作業系統篩選..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:504
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:564
|
||||
msgid "Filter:"
|
||||
msgstr "篩選:"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid "Firewall Mode"
|
||||
msgstr "防火牆模式"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:676
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:716
|
||||
msgid "Firewall configuration already applied."
|
||||
msgstr "防火牆設定已套用。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:159
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:219
|
||||
msgid "Firewall configuration applied."
|
||||
msgstr "已套用防火牆設定"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:165
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:225
|
||||
msgid "Firewall reload failed"
|
||||
msgstr "防火牆重新載入失敗"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:600
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:640
|
||||
msgid "General Settings"
|
||||
msgstr "一般設定"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:509
|
||||
msgid "Hostname"
|
||||
msgstr "主機名"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:706
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:746
|
||||
msgid "How to enable Exit Node?"
|
||||
msgstr "如何啟用出口節點?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
msgid "How to enable Site-to-Site?"
|
||||
msgstr "如何啟用站對站通訊?"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:730
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
msgid ""
|
||||
"If the timeout is displayed, you can refresh the page and click Login "
|
||||
"again."
|
||||
msgstr "如果顯示逾時,您可以重新整理頁面並再次點選登入。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:744
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:784
|
||||
msgid ""
|
||||
"If you are using custom login server but not providing an Auth Key, "
|
||||
"will redirect to the login page without pre-filling the key."
|
||||
msgstr "如果您使用自訂登入伺服器但未提供認證金鑰,將重新導向至登入頁面,且不會預先填入金鑰。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:215
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
msgid "Invalid Date"
|
||||
msgstr "無效日期"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:829
|
||||
msgid "Invalid response from server."
|
||||
msgstr "伺服器回應無效。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:646
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:686
|
||||
msgid ""
|
||||
"It creates the tailscale interface, adds it to a firewall zone, and "
|
||||
"sets up forwarding between LAN and Tailscale, plus Tailscale to WAN."
|
||||
@@ -359,241 +359,241 @@ msgstr ""
|
||||
"它會建立 tailscale 介面、加入防火牆區域,並設定 LAN 與 Tailscale 之間的轉送,以及 Tailscale 到 "
|
||||
"WAN 的轉送。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:218
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:278
|
||||
msgid "Just now"
|
||||
msgstr "剛才"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:330
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:390
|
||||
msgid "LOGGED OUT"
|
||||
msgstr "已登出"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:455
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:515
|
||||
msgid "Last Seen"
|
||||
msgstr "上次連線"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:776
|
||||
msgid "Leave blank for default Tailscale control plane."
|
||||
msgstr "留白則使用預設的 Tailscale 控制台。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:853
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:893
|
||||
msgid "Loading logs"
|
||||
msgstr "正在載入日誌"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Logging out..."
|
||||
msgstr "正在登出..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:728
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
msgid "Login"
|
||||
msgstr "登入"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:749
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:815
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:823
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:789
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:855
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:863
|
||||
msgid "Logout"
|
||||
msgstr "登出"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
msgid "Logout failed: %s"
|
||||
msgstr "登出失敗: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:836
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:876
|
||||
msgid "Logs"
|
||||
msgstr "日誌"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "MagicDNS: Tailscale overrides resolv.conf."
|
||||
msgstr "MagicDNS:Tailscale 將接管 resolv.conf。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:648
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:688
|
||||
msgid ""
|
||||
"Masquerading and MSS Clamping (MTU fix) are enabled to keep "
|
||||
"connections stable."
|
||||
msgstr "同時啟用偽裝與 MSS Clamping (MTU 修復),以維持連線穩定。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:212
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
msgid "N/A"
|
||||
msgstr "N/A"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:341
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:401
|
||||
msgid "NOT RUNNING"
|
||||
msgstr "未執行"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:439
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:499
|
||||
msgid "No matching peer devices found."
|
||||
msgstr "找不到符合的對等裝置。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:460
|
||||
msgid "No peer devices found."
|
||||
msgstr "未找到對等裝置。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:368
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:428
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:880
|
||||
msgid "No tailscale-related logs found."
|
||||
msgstr "未找到與 tailscale 相關的日誌。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:613
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:653
|
||||
msgid "None"
|
||||
msgstr "無"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:213
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:273
|
||||
msgid "Now"
|
||||
msgstr "現在"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:451
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:511
|
||||
msgid "OS"
|
||||
msgstr "作業系統"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Offline"
|
||||
msgstr "離線"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:424
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:484
|
||||
msgid "Online"
|
||||
msgstr "上線"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward"
|
||||
msgstr "OpenWrt 轉送"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:85
|
||||
msgid "OpenWrt Forward: MagicDNS via dnsmasq forwarding.(Only support ts.net)"
|
||||
msgstr "OpenWrt 轉送:僅經由 dnsmasq 轉送至 MagicDNS。(僅支援tailxxxxxx.ts.net)"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:39
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:62
|
||||
msgid "Operation"
|
||||
msgstr "操作"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:735
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:775
|
||||
msgid ""
|
||||
"Optional: Specify a custom control server URL (e.g., a Headscale "
|
||||
"instance, %s)."
|
||||
msgstr "可選:指定自訂控制伺服器 URL(例如,Headscale 實例,「%s」)。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:743
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:783
|
||||
msgid ""
|
||||
"Optional: Specify an authentication key for the custom control "
|
||||
"server. Leave blank if not required."
|
||||
msgstr "可選:為自訂控制伺服器指定一個認證金鑰。如果不需要,請留白。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:604
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:644
|
||||
msgid "Peer Relay Port"
|
||||
msgstr "對等中繼連接埠"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:392
|
||||
msgid "Please use the login button in the settings below to authenticate."
|
||||
msgstr "請使用下方設定中的登入按鈕進行認證。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:852
|
||||
msgid "Please wait."
|
||||
msgstr "請稍候。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "RUNNING"
|
||||
msgstr "正在執行"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:453
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:513
|
||||
msgid "RX"
|
||||
msgstr "接收"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:845
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:885
|
||||
msgid "Refresh"
|
||||
msgstr "重新整理"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:177
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:237
|
||||
msgid "Reloading firewall..."
|
||||
msgstr "正在重新載入防火牆..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:772
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:778
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:812
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:818
|
||||
msgid "Requesting Login URL..."
|
||||
msgstr "正在請求登入 URL..."
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:769
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:809
|
||||
msgid "Requesting Tailscale login URL... Please wait."
|
||||
msgstr "正在請求 Tailscale 登入 URL... 請稍候。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:612
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:652
|
||||
msgid ""
|
||||
"Select an exit node from the list. If enabled, Allow LAN Access is "
|
||||
"enabled implicitly."
|
||||
msgstr "從清單中選擇一個出口節點。啟用後會一併啟用「允許區網存取」。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:54
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:77
|
||||
msgid ""
|
||||
"Select the firewall backend for Tailscale to use. Requires service "
|
||||
"restart to take effect."
|
||||
msgstr "選擇 Tailscale 使用的防火牆後端。需要重新啟動服務才能生效。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:320
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:328
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:340
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:349
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:380
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:388
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:400
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:409
|
||||
msgid "Service Status"
|
||||
msgstr "服務狀態"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:70
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:93
|
||||
msgid ""
|
||||
"Set a custom MTU for the Tailscale daemon. Leave blank to use the "
|
||||
"default value."
|
||||
msgstr "為 Tailscale 常駐程式設定自訂 MTU。留白則使用預設值。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid "Shields Up"
|
||||
msgstr "封鎖入站連線"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:448
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:508
|
||||
msgid "Status"
|
||||
msgstr "狀態"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:817
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:857
|
||||
msgid "Successfully logged out."
|
||||
msgstr "登出成功。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:321
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:381
|
||||
msgid "TAILSCALE NOT FOUND"
|
||||
msgstr "找不到 TAILSCALE"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:351
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:411
|
||||
msgid "TUN Mode"
|
||||
msgstr "TUN 模式"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:454
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:514
|
||||
msgid "TX"
|
||||
msgstr "傳送"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:354
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:414
|
||||
msgid "Tailnet Name"
|
||||
msgstr "Tailnet 名稱"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
#: luci-app-tailscale-community/root/usr/share/luci/menu.d/luci-app-tailscale-community.json:1
|
||||
msgid "Tailscale"
|
||||
msgstr "Tailscale"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:297
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:357
|
||||
msgid "Tailscale Health Check: %s"
|
||||
msgstr "Tailscale 健康檢查: %s"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:450
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:510
|
||||
msgid "Tailscale IP"
|
||||
msgstr "Tailscale IP"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:352
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:412
|
||||
msgid "Tailscale IPv4"
|
||||
msgstr "Tailscale IPv4"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:353
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:413
|
||||
msgid "Tailscale IPv6"
|
||||
msgstr "Tailscale IPv6"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:768
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:808
|
||||
msgid "Tailscale Login"
|
||||
msgstr "Tailscale 登入"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:562
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:622
|
||||
msgid ""
|
||||
"Tailscale is a mesh VPN solution that makes it easy to connect your "
|
||||
"devices securely. This configuration page allows you to manage "
|
||||
@@ -602,80 +602,80 @@ msgstr ""
|
||||
"Tailscale 是一個網狀 VPN 解決方案,可以輕鬆地安全連線您的裝置。此設定頁面允許您在 OpenWrt 裝置上管理 "
|
||||
"Tailscale 設定。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:389
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:449
|
||||
msgid "Tailscale status error"
|
||||
msgstr "Tailscale 狀態錯誤"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:647
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:687
|
||||
msgid ""
|
||||
"The Tailscale to WAN forwarding is what lets clients send their "
|
||||
"internet traffic through this device as an Exit Node."
|
||||
msgstr "Tailscale 到 WAN 的轉送,讓用戶端能透過此裝置以出口節點傳送網際網路流量。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:770
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:810
|
||||
msgid "This can take up to 30 seconds."
|
||||
msgstr "此過程最多可能需要 30 秒。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:800
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:840
|
||||
msgid ""
|
||||
"This will disconnect this device from your Tailnet and require you to "
|
||||
"re-authenticate."
|
||||
msgstr "這將使此裝置從您的 Tailnet 中斷連線,並需要您重新進行身份驗證。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:143
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:194
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:203
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:254
|
||||
msgid "Timed out waiting for the firewall reload"
|
||||
msgstr "等待防火牆重新載入逾時"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:605
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:645
|
||||
msgid ""
|
||||
"UDP port for the Peer Relay service. Open this port on your router "
|
||||
"firewall/NAT."
|
||||
msgstr "用於對等中繼服務的 UDP 連接埠。請在路由器的防火牆/NAT 上開放此連接埠。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:245
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:272
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:275
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:683
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:793
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:820
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:859
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:305
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:332
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:335
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:723
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:833
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:860
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:899
|
||||
msgid "Unknown error"
|
||||
msgstr "未知錯誤"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:350
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:410
|
||||
msgid "Version"
|
||||
msgstr "版本"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:60
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:83
|
||||
msgid ""
|
||||
"When enabled, blocks all inbound connections from the Tailscale "
|
||||
"network."
|
||||
msgstr "啟用後,將阻止來自 Tailscale 網路的所有入站連線。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:57
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:80
|
||||
msgid "When using the exit node, access to the local LAN is allowed."
|
||||
msgstr "使用出口節點時,允許存取區域網路。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:660
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:700
|
||||
msgid ""
|
||||
"You have unapplied changes. Save & Apply them first so the firewall "
|
||||
"matches the form."
|
||||
msgstr "您有尚未套用的變更。請先儲存並套用,防火牆才會與表單內容一致。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:696
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:736
|
||||
msgid ""
|
||||
"[Important] Log in to the Tailscale admin console and manually enable "
|
||||
"\"Subnet Routes\" for this device."
|
||||
msgstr "【重要】 登入 Tailscale 管理控制台,在裝置設定中手動授權子網路由。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:719
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:759
|
||||
msgid ""
|
||||
"[Important] Step 3 cannot be done here: it needs your Tailscale "
|
||||
"account."
|
||||
msgstr "[重要] 步驟 3 無法在此完成:需要您的 Tailscale 帳號。"
|
||||
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:221
|
||||
#: luci-app-tailscale-community/htdocs/luci-static/resources/view/tailscale.js:281
|
||||
msgid "ago"
|
||||
msgstr "前"
|
||||
|
||||
|
||||
@@ -254,10 +254,18 @@ apply_settings() {
|
||||
&& set -- "$@" --webclient=true \
|
||||
|| set -- "$@" --webclient=false
|
||||
|
||||
# --snat-subnet-routes (inverse of nosnat)
|
||||
[ "$nosnat" = "1" ] \
|
||||
&& set -- "$@" --snat-subnet-routes=false \
|
||||
|| set -- "$@" --snat-subnet-routes=true
|
||||
# Everything below is handed to 'tailscale set' in one call, and 'set'
|
||||
# aborts on an unknown flag. Gate the newer options on the first release
|
||||
# that accepts them, so an older CLI still applies the rest.
|
||||
local ts_ver
|
||||
ts_ver=$("$ts_bin" version 2>/dev/null | head -n1)
|
||||
|
||||
# --snat-subnet-routes (requires tailscale >= 1.66.1)
|
||||
if [ -n "$ts_ver" ] && version_gte "$ts_ver" "1.66.1"; then
|
||||
[ "$nosnat" = "1" ] \
|
||||
&& set -- "$@" --snat-subnet-routes=false \
|
||||
|| set -- "$@" --snat-subnet-routes=true
|
||||
fi
|
||||
|
||||
# --advertise-routes (comma-separated, empty clears routes)
|
||||
set -- "$@" "--advertise-routes=$routes"
|
||||
@@ -268,13 +276,11 @@ apply_settings() {
|
||||
# when an exit node is configured, always allow LAN access
|
||||
[ -n "$exit_node" ] && set -- "$@" --exit-node-allow-lan-access=true
|
||||
|
||||
# --hostname (only set if non-empty)
|
||||
[ -n "$hostname" ] && set -- "$@" "--hostname=$hostname"
|
||||
# --hostname (empty resets it to the OS hostname)
|
||||
set -- "$@" "--hostname=$hostname"
|
||||
|
||||
# --relay-server-port (requires tailscale >= 1.90.5)
|
||||
local ts_ver
|
||||
ts_ver=$("$ts_bin" version 2>/dev/null | head -n1)
|
||||
if [ -n "$ts_ver" ] && version_gte "$ts_ver" "1.90.5"; then
|
||||
# --relay-server-port (requires tailscale >= 1.84.0)
|
||||
if [ -n "$ts_ver" ] && version_gte "$ts_ver" "1.84.0"; then
|
||||
if [ "$enable_relay" = "1" ]; then
|
||||
set -- "$@" "--relay-server-port=${relay_server_port:-40000}"
|
||||
else
|
||||
@@ -282,9 +288,16 @@ apply_settings() {
|
||||
fi
|
||||
fi
|
||||
|
||||
# --netfilter-mode (only when disable_fw_config is enabled and tailscale init doesn't already handle it)
|
||||
if [ "$disable_fw_config" = "1" ]; then
|
||||
set -- "$@" --netfilter-mode=off
|
||||
# --netfilter-mode (off when disable_fw_config is enabled, back to on
|
||||
# otherwise; requires tailscale >= 1.66.1)
|
||||
if [ -n "$ts_ver" ] && version_gte "$ts_ver" "1.66.1"; then
|
||||
if [ "$disable_fw_config" = "1" ]; then
|
||||
set -- "$@" --netfilter-mode=off
|
||||
else
|
||||
set -- "$@" --netfilter-mode=on
|
||||
fi
|
||||
elif [ "$disable_fw_config" = "1" ]; then
|
||||
logger -t "$NAME" "tailscale ${ts_ver:-before 1.66.1} has no --netfilter-mode in 'set', ignoring disable_fw_config"
|
||||
fi
|
||||
|
||||
logger -t "$NAME" "Applying settings"
|
||||
@@ -319,8 +332,16 @@ sync_service_enabled() {
|
||||
# the baseline instead of treating it as a transition: starting
|
||||
# a daemon here would run start_service, which arms another UCI
|
||||
# rollback window right after the one this apply is inside.
|
||||
echo "$service_enabled" > "$ENABLED_FILE"
|
||||
prev="$service_enabled"
|
||||
#
|
||||
# An armed disable request is the exception: the user just asked
|
||||
# for the stop, so the baseline has to be "was running", not "was
|
||||
# stopped", or the request would be dropped without stopping.
|
||||
if [ -f "$DISABLE_REQUEST_FILE" ]; then
|
||||
prev=1
|
||||
else
|
||||
echo "$service_enabled" > "$ENABLED_FILE"
|
||||
prev="$service_enabled"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
@@ -36,25 +36,60 @@ write_state() {
|
||||
# Only one worker at a time: a second click while a reload is running would
|
||||
# queue another network reload on top of an unfinished one. mkdir is atomic and
|
||||
# is the only portable primitive available here; a test-then-write pair lets
|
||||
# two workers through at the same moment. Stale locks are recognised by age so
|
||||
# a recycled pid or a killed worker cannot block forever.
|
||||
# two workers through at the same moment. Stale locks are recognised by age and
|
||||
# by a dead pid so a killed worker cannot block forever, but a lock that is
|
||||
# merely young is never taken over.
|
||||
LOCK_DIR="$LOCK_FILE.d"
|
||||
lock_age() {
|
||||
local ts now
|
||||
ts=$(cat "$LOCK_DIR/ts" 2>/dev/null)
|
||||
case "$ts" in ''|*[!0-9]*) echo 999999; return ;; esac
|
||||
# A missing or unreadable timestamp means mkdir just won the race and the
|
||||
# holder has not written pid/ts yet. Reporting that window as ancient let a
|
||||
# late worker rip the lock away mid start up, so two reloads ran at once:
|
||||
# the very thing this lock exists to prevent. It is a fresh lock instead.
|
||||
#
|
||||
# The directory mtime covers the other side of the same window: a worker
|
||||
# killed between mkdir and the ts write would otherwise leave an ageless
|
||||
# lock that nobody ever takes over.
|
||||
case "$ts" in
|
||||
''|*[!0-9]*)
|
||||
ts=$(date -r "$LOCK_DIR" +%s 2>/dev/null)
|
||||
case "$ts" in ''|*[!0-9]*) echo 0; return ;; esac
|
||||
;;
|
||||
esac
|
||||
now=$(date +%s)
|
||||
echo $((now - ts))
|
||||
}
|
||||
|
||||
# kill -0 is the portable liveness probe available in busybox ash. No readable
|
||||
# pid means the holder never got to write one, which is what a lock left behind
|
||||
# by a crash looks like, so it counts as gone.
|
||||
lock_holder_alive() {
|
||||
local pid
|
||||
pid=$(cat "$LOCK_DIR/pid" 2>/dev/null)
|
||||
case "$pid" in ''|*[!0-9]*) return 1 ;; esac
|
||||
kill -0 "$pid" 2>/dev/null
|
||||
}
|
||||
|
||||
# Returns 0 when this process owns a freshly created lock directory. Deletes are
|
||||
# not in place: rm -rf then mkdir leaves a window where two workers both think
|
||||
# they won. Renaming the old directory is a single step that only one worker can
|
||||
# win; the loser reports busy. mkdir can still lose to a third worker.
|
||||
take_over_stale_lock() {
|
||||
local aside
|
||||
[ "$(lock_age)" -gt 300 ] || return 1
|
||||
lock_holder_alive && return 1
|
||||
aside="$LOCK_DIR.stale.$$"
|
||||
mv "$LOCK_DIR" "$aside" 2>/dev/null || return 1
|
||||
rm -rf "$aside"
|
||||
mkdir "$LOCK_DIR" 2>/dev/null
|
||||
}
|
||||
|
||||
if ! mkdir "$LOCK_DIR" 2>/dev/null; then
|
||||
if [ "$(lock_age)" -gt 300 ]; then
|
||||
# the holder is gone; take the lock over
|
||||
rm -rf "$LOCK_DIR"
|
||||
mkdir "$LOCK_DIR" 2>/dev/null || exit 0
|
||||
else
|
||||
# someone else is already reloading: say so instead of leaving the
|
||||
# status file at "queued" and letting the UI time out
|
||||
if ! take_over_stale_lock; then
|
||||
# someone else is already reloading, or another worker won the takeover:
|
||||
# say so instead of leaving the status file at "queued" and letting the
|
||||
# UI time out
|
||||
write_state busy locked "Another firewall reload is already running"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { access, popen, readfile, writefile, unlink } from 'fs';
|
||||
import { access, popen, readfile, writefile, rename, unlink } from 'fs';
|
||||
import { cursor } from 'uci';
|
||||
|
||||
const uci = cursor();
|
||||
@@ -361,13 +361,22 @@ methods.setup_firewall = {
|
||||
// gets a chance to overwrite it. Without both, a poll arriving
|
||||
// while the worker is still starting would read the previous
|
||||
// run's "done" and report success for work that has not run.
|
||||
run_id = time();
|
||||
let st = writefile('/var/run/tailscale-fwsetup.status.tmp',
|
||||
'queued\nstart\n\n' + run_id + '\n');
|
||||
if (st == null || rename('/var/run/tailscale-fwsetup.status.tmp', '/var/run/tailscale-fwsetup.status') == null) {
|
||||
// clock() returns [seconds, nanoseconds], not milliseconds, so
|
||||
// fold it explicitly. Two clicks within the same second still
|
||||
// get distinct ids; the temp file name carries the id as well,
|
||||
// so concurrent writers cannot clobber each other's queued
|
||||
// state through a shared fixed path.
|
||||
let now = clock();
|
||||
run_id = now[0] * 1000 + int(now[1] / 1000000);
|
||||
let tmp = '/var/run/tailscale-fwsetup.status.tmp.' + run_id;
|
||||
let st = writefile(tmp, 'queued\nstart\n\n' + run_id + '\n');
|
||||
if (st == null || rename(tmp, '/var/run/tailscale-fwsetup.status') == null) {
|
||||
// Without a writable status file the poll can never see a
|
||||
// result, so say so instead of letting the UI wait it out.
|
||||
return { error: 'Cannot write the firewall status file in /var/run. Configuration was not changed.' };
|
||||
// Drop the temp file we may have created, so a failed run
|
||||
// leaves no stray state behind for the next poll.
|
||||
unlink(tmp);
|
||||
return { error: 'Cannot write the firewall status file in /var/run. The configuration was committed but not applied.' };
|
||||
}
|
||||
|
||||
// The background shell exits immediately, so its status only
|
||||
@@ -467,7 +476,12 @@ methods.get_logs = {
|
||||
args: { lines: 200 },
|
||||
call: function(request) {
|
||||
let lines = int(request?.args?.lines) || 200;
|
||||
let cmd = 'logread -l ' + lines + ' 2>/dev/null | grep -i -E "tailscale" || true';
|
||||
if (lines < 1) lines = 200;
|
||||
if (lines > 1000) lines = 1000;
|
||||
// Filter first, then take the tail: logread -l would only hand the last
|
||||
// N lines of every daemon to grep, so a busy box hides the tailscale
|
||||
// records entirely and the log page claims there is nothing to show.
|
||||
let cmd = 'logread 2>/dev/null | grep -i -E "tailscale" | tail -n ' + lines;
|
||||
let result = exec(cmd);
|
||||
if (result.code == 0) {
|
||||
return { success: true, logs: result.stdout };
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=maxminddb-dump-country
|
||||
PKG_VERSION:=2
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_MAINTAINER:=Konstantine Shevlakov <shevlakov@132lan.ru>
|
||||
PKG_LICENSE:=LICENSE
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
From 8ea81c36bee0d4eefc023561a423cbfaac7acc41 Mon Sep 17 00:00:00 2001
|
||||
From 2090af86fc5769d865bacb9446af046500f48914 Mon Sep 17 00:00:00 2001
|
||||
From: koshev-msk <kosnt.shell@gmail.com>
|
||||
Date: Thu, 29 Oct 2026 23:04:25 +0000
|
||||
Subject: [PATCH] geoip: add DB-IP CSV input support
|
||||
Date: Fri, 30 Oct 2026 10:55:20 +0000
|
||||
Subject: [PATCH 1/2] geoip: add DB-IP CSV input support
|
||||
|
||||
Add a -d option to read DB-IP Country Lite CSV files and generate the
|
||||
same per-country .iv4/.iv6 binary range files as the existing MMDB
|
||||
@@ -16,11 +16,11 @@ unchanged.
|
||||
|
||||
Signed-off-by: OpenWrt Developer <builder@example.invalid>
|
||||
---
|
||||
xt_geoip_build_maxmind.c | 292 ++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 260 insertions(+), 32 deletions(-)
|
||||
xt_geoip_build_maxmind.c | 295 ++++++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 262 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/xt_geoip_build_maxmind.c b/xt_geoip_build_maxmind.c
|
||||
index 55e86d0..95d2c92 100644
|
||||
index 55e86d0..eeb6bae 100644
|
||||
--- a/xt_geoip_build_maxmind.c
|
||||
+++ b/xt_geoip_build_maxmind.c
|
||||
@@ -3,6 +3,7 @@
|
||||
@@ -245,7 +245,17 @@ index 55e86d0..95d2c92 100644
|
||||
static int skip_n96 = 0;
|
||||
|
||||
void tree_walk(int rn,int l, uint8_t *path) {
|
||||
@@ -372,9 +573,10 @@ int main(int argc, char **argv)
|
||||
@@ -358,7 +559,8 @@ void tree_walk(int rn,int l, uint8_t *path) {
|
||||
}
|
||||
|
||||
void usage(void) {
|
||||
- printf("%s [-4] [-6] [-v] [-c] [-N ASNUM|string ][-A all|asnum[,asnum...]] [-o outputdir] file.mmdb\n",progname);
|
||||
+ printf("%s [-4] [-6] [-v] [-c] [-d dbip.csv] [-N ASNUM|string ][-A all|asnum[,asnum...]] [-o outputdir] [file.mmdb]\n",progname);
|
||||
+ printf("\t -d: read DB-IP Country Lite CSV and write binary GeoIP files\n");
|
||||
printf("\t asnum: number | number-number\n");
|
||||
exit(1);
|
||||
}
|
||||
@@ -372,9 +574,10 @@ int main(int argc, char **argv)
|
||||
|
||||
progname = strdup(argv[0]);
|
||||
|
||||
@@ -257,7 +267,7 @@ index 55e86d0..95d2c92 100644
|
||||
case '4': opt_6 = 0; break;
|
||||
case '6': opt_4 = 0; break;
|
||||
case 'v': opt_v++; break;
|
||||
@@ -394,17 +596,29 @@ int main(int argc, char **argv)
|
||||
@@ -394,17 +597,29 @@ int main(int argc, char **argv)
|
||||
filename = strdup(argv[optind]);
|
||||
} else {
|
||||
filename = opt_asn ? asn_name:country_name;
|
||||
@@ -289,7 +299,7 @@ index 55e86d0..95d2c92 100644
|
||||
if(opt_asn && (opt_xtgeo || opt_csv)) {
|
||||
fprintf(stderr,"%s: cant use -A with -o or -c\n",progname);
|
||||
exit(1);
|
||||
@@ -426,43 +640,55 @@ int main(int argc, char **argv)
|
||||
@@ -426,43 +641,55 @@ int main(int argc, char **argv)
|
||||
output_dir[l+2] = '\0';
|
||||
}
|
||||
|
||||
@@ -374,7 +384,7 @@ index 55e86d0..95d2c92 100644
|
||||
}
|
||||
c_ipv4 += CCN4[fd];
|
||||
c_ipv6 += CCN6[fd];
|
||||
@@ -482,6 +708,8 @@ int main(int argc, char **argv)
|
||||
@@ -482,6 +709,8 @@ int main(int argc, char **argv)
|
||||
if(CSV_IPv6_fd) fclose(CSV_IPv6_fd);
|
||||
if(CSV_EN_fd) fclose(CSV_EN_fd);
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
--- a/xt_geoip_build_maxmind.c
|
||||
+++ b/xt_geoip_build_maxmind.c
|
||||
@@ -559,7 +559,7 @@
|
||||
}
|
||||
|
||||
void usage(void) {
|
||||
- printf("%s [-4] [-6] [-v] [-c] [-N ASNUM|string ][-A all|asnum[,asnum...]] [-o outputdir] file.mmdb\n",progname);
|
||||
+ printf("%s [-4] [-6] [-v] [-c] [-N ASNUM|string ][-A all|asnum[,asnum...]] [-o outputdir] file.mmdb|-d file.dbip.csv\n",progname);
|
||||
printf("\t asnum: number | number-number\n");
|
||||
exit(1);
|
||||
}
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
From d77c01d155793a19d28828bbb1d659ec19089b18 Mon Sep 17 00:00:00 2001
|
||||
From: koshev-msk <kosnt.shell@gmail.com>
|
||||
Date: Fri, 30 Oct 2026 10:55:20 +0000
|
||||
Subject: [PATCH 2/2] geoip: accept ip/prefix,country lines in -d CSV input
|
||||
|
||||
Besides the DB-IP start_ip,end_ip,country format, allow two-field
|
||||
lines in the form ip/prefix,country so that own lists can be written
|
||||
in CIDR notation. Both IPv4 and IPv6 are supported; the range is
|
||||
computed by clearing host bits for the start address and setting them
|
||||
for the end address. Prefix length is validated against the address
|
||||
family (0..32 / 0..128).
|
||||
|
||||
Signed-off-by: OpenWrt Developer <builder@example.invalid>
|
||||
---
|
||||
xt_geoip_build_maxmind.c | 90 ++++++++++++++++++++++++++++++----------
|
||||
1 file changed, 67 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/xt_geoip_build_maxmind.c b/xt_geoip_build_maxmind.c
|
||||
index eeb6bae..0c81d58 100644
|
||||
--- a/xt_geoip_build_maxmind.c
|
||||
+++ b/xt_geoip_build_maxmind.c
|
||||
@@ -332,6 +332,8 @@ void p_dump(int l, uint8_t *path, MMDB_entry_s *e) {
|
||||
/*
|
||||
* DB-IP Country Lite CSV format:
|
||||
* start_ip,end_ip,country
|
||||
+ * or, for own lists:
|
||||
+ * ip/prefix,country
|
||||
*
|
||||
* The fields may optionally be quoted. The CSV has no embedded commas.
|
||||
*/
|
||||
@@ -351,6 +353,21 @@ static char *csv_trim(char *field)
|
||||
return field;
|
||||
}
|
||||
|
||||
+/* Convert addr/plen to first and last address of the network. */
|
||||
+static void cidr_range(uint8_t *start, uint8_t *end, unsigned alen,
|
||||
+ unsigned plen)
|
||||
+{
|
||||
+ unsigned i, bits;
|
||||
+ uint8_t mask;
|
||||
+
|
||||
+ for(i = 0; i < alen; i++) {
|
||||
+ bits = plen > i * 8 ? plen - i * 8 : 0;
|
||||
+ mask = bits >= 8 ? 0xff : (uint8_t)(0xff00 >> bits);
|
||||
+ start[i] &= mask;
|
||||
+ end[i] = start[i] | (uint8_t)~mask;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int dbip_write_range(int family, const uint8_t *start,
|
||||
const uint8_t *end, const char *country, int cind)
|
||||
{
|
||||
@@ -411,8 +428,10 @@ static int dbip_csv_dump(const char *path)
|
||||
}
|
||||
|
||||
while(fgets(line, sizeof(line), input)) {
|
||||
- char *field[3], *p, *comma;
|
||||
+ char *field[3], *p, *comma, *slash, *endp;
|
||||
char *country;
|
||||
+ unsigned long plen;
|
||||
+ int nfields;
|
||||
uint8_t start[16], end[16];
|
||||
char start_text[INET6_ADDRSTRLEN];
|
||||
char end_text[INET6_ADDRSTRLEN];
|
||||
@@ -438,17 +457,22 @@ static int dbip_csv_dump(const char *path)
|
||||
field[1] = comma + 1;
|
||||
|
||||
comma = strchr(field[1], ',');
|
||||
- if(!comma)
|
||||
- goto malformed;
|
||||
- *comma = '\0';
|
||||
- field[2] = comma + 1;
|
||||
- if(strchr(field[2], ','))
|
||||
- goto malformed;
|
||||
+ if(comma) {
|
||||
+ *comma = '\0';
|
||||
+ field[2] = comma + 1;
|
||||
+ if(strchr(field[2], ','))
|
||||
+ goto malformed;
|
||||
+ nfields = 3;
|
||||
+ } else {
|
||||
+ field[2] = NULL;
|
||||
+ nfields = 2;
|
||||
+ }
|
||||
|
||||
field[0] = csv_trim(field[0]);
|
||||
field[1] = csv_trim(field[1]);
|
||||
- field[2] = csv_trim(field[2]);
|
||||
- country = field[2];
|
||||
+ if(field[2])
|
||||
+ field[2] = csv_trim(field[2]);
|
||||
+ country = field[nfields - 1];
|
||||
|
||||
if(first_line) {
|
||||
first_line = 0;
|
||||
@@ -474,6 +498,14 @@ static int dbip_csv_dump(const char *path)
|
||||
if(cind < 0)
|
||||
continue;
|
||||
|
||||
+ slash = NULL;
|
||||
+ if(nfields == 2) {
|
||||
+ slash = strchr(field[0], '/');
|
||||
+ if(!slash)
|
||||
+ goto malformed;
|
||||
+ *slash++ = '\0';
|
||||
+ }
|
||||
+
|
||||
if(inet_pton(AF_INET, field[0], start) == 1)
|
||||
family = AF_INET;
|
||||
else if(inet_pton(AF_INET6, field[0], start) == 1)
|
||||
@@ -485,19 +517,31 @@ static int dbip_csv_dump(const char *path)
|
||||
break;
|
||||
}
|
||||
|
||||
- if(inet_pton(family, field[1], end) != 1) {
|
||||
- fprintf(stderr, "Invalid or mismatched end IP on DB-IP CSV line %lu\n",
|
||||
- lineno);
|
||||
- result = -1;
|
||||
- break;
|
||||
- }
|
||||
- end_family = family;
|
||||
- if(end_family != family ||
|
||||
- memcmp(start, end, family == AF_INET ? 4 : 16) > 0) {
|
||||
- fprintf(stderr, "Invalid IP range on DB-IP CSV line %lu\n",
|
||||
- lineno);
|
||||
- result = -1;
|
||||
- break;
|
||||
+ if(slash) {
|
||||
+ plen = strtoul(slash, &endp, 10);
|
||||
+ if(!isdigit((unsigned char)*slash) || *endp ||
|
||||
+ plen > (family == AF_INET ? 32 : 128)) {
|
||||
+ fprintf(stderr, "Invalid prefix length on DB-IP CSV line %lu\n",
|
||||
+ lineno);
|
||||
+ result = -1;
|
||||
+ break;
|
||||
+ }
|
||||
+ cidr_range(start, end, family == AF_INET ? 4 : 16, plen);
|
||||
+ } else {
|
||||
+ if(inet_pton(family, field[1], end) != 1) {
|
||||
+ fprintf(stderr, "Invalid or mismatched end IP on DB-IP CSV line %lu\n",
|
||||
+ lineno);
|
||||
+ result = -1;
|
||||
+ break;
|
||||
+ }
|
||||
+ end_family = family;
|
||||
+ if(end_family != family ||
|
||||
+ memcmp(start, end, family == AF_INET ? 4 : 16) > 0) {
|
||||
+ fprintf(stderr, "Invalid IP range on DB-IP CSV line %lu\n",
|
||||
+ lineno);
|
||||
+ result = -1;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
if(dbip_write_range(family, start, end, country, cind)) {
|
||||
@@ -560,7 +604,7 @@ void tree_walk(int rn,int l, uint8_t *path) {
|
||||
|
||||
void usage(void) {
|
||||
printf("%s [-4] [-6] [-v] [-c] [-d dbip.csv] [-N ASNUM|string ][-A all|asnum[,asnum...]] [-o outputdir] [file.mmdb]\n",progname);
|
||||
- printf("\t -d: read DB-IP Country Lite CSV and write binary GeoIP files\n");
|
||||
+ printf("\t -d: read CSV (start_ip,end_ip,CC or ip/prefix,CC) and write binary GeoIP files\n");
|
||||
printf("\t asnum: number | number-number\n");
|
||||
exit(1);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=meow
|
||||
PKG_VERSION:=0.27.0
|
||||
PKG_RELEASE:=17
|
||||
PKG_VERSION:=0.28.0
|
||||
PKG_RELEASE:=18
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/meow-rs/meow-rs/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=microsocks
|
||||
PKG_VERSION:=1.0.5
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/rofl0r/microsocks/tar.gz/v$(PKG_VERSION)?
|
||||
|
||||
@@ -1,428 +0,0 @@
|
||||
--- a/sockssrv.c
|
||||
+++ b/sockssrv.c
|
||||
@@ -33,8 +33,10 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
+#include <sys/time.h>
|
||||
#include "server.h"
|
||||
#include "sblist.h"
|
||||
+#define MICROSOCKS_VERSION "1.0.5-forward"
|
||||
|
||||
/* timeout in microseconds on resource exhaustion to prevent excessive
|
||||
cpu usage. */
|
||||
@@ -71,6 +73,7 @@
|
||||
static pthread_rwlock_t auth_ips_lock = PTHREAD_RWLOCK_INITIALIZER;
|
||||
static const struct server* server;
|
||||
static union sockaddr_union bind_addr = {.v4.sin_family = AF_UNSPEC};
|
||||
+static sblist *fwd_rules;
|
||||
|
||||
enum socksstate {
|
||||
SS_1_CONNECTED,
|
||||
@@ -97,6 +100,17 @@
|
||||
EC_ADDRESSTYPE_NOT_SUPPORTED = 8,
|
||||
};
|
||||
|
||||
+struct fwd_rule {
|
||||
+ char *match_name;
|
||||
+ short match_port;
|
||||
+ char *auth_buf; /* Username/Password request buffer (RFC-1929) */
|
||||
+ size_t auth_len;
|
||||
+ char *upstream_name;
|
||||
+ short upstream_port;
|
||||
+ char *req_buf; /* Client Connection Request buffer to send to upstream */
|
||||
+ size_t req_len;
|
||||
+};
|
||||
+
|
||||
struct thread {
|
||||
pthread_t pt;
|
||||
struct client client;
|
||||
@@ -116,6 +130,109 @@
|
||||
static void dolog(const char* fmt, ...) { }
|
||||
#endif
|
||||
|
||||
+static int upstream_handshake(const struct fwd_rule* rule, unsigned char *client_buf, size_t client_buf_len,
|
||||
+ int client_fd, int upstream_fd, unsigned short client_port) {
|
||||
+ unsigned char sbuf[512];
|
||||
+ ssize_t r;
|
||||
+
|
||||
+ if(rule->auth_buf) {
|
||||
+ unsigned char handshake[4] = {5, 2, 0, 2};
|
||||
+ if (write(upstream_fd, handshake, 4) != 4) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ } else {
|
||||
+ unsigned char handshake[3] = {5, 1, 0};
|
||||
+ if (write(upstream_fd, handshake, 3) != 3) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (read(upstream_fd, sbuf, 2) != 2 || sbuf[0] != 5) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (sbuf[1] == 2) {
|
||||
+ if (!rule->auth_buf) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (write(upstream_fd, rule->auth_buf, rule->auth_len) != (ssize_t)rule->auth_len) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ if (read(upstream_fd, sbuf, 2) != 2 || sbuf[0] != 1 || sbuf[1] != 0) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ } else if (sbuf[1] != 0) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ if (write(upstream_fd, client_buf, client_buf_len) != (ssize_t)client_buf_len) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ size_t total = 0;
|
||||
+ size_t need = 4;
|
||||
+
|
||||
+ while (total < need) {
|
||||
+ r = read(upstream_fd, sbuf + total, need - total);
|
||||
+ if (r <= 0) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ total += r;
|
||||
+ }
|
||||
+
|
||||
+ if (sbuf[1] != 0) {
|
||||
+ close(upstream_fd);
|
||||
+ return -sbuf[1];
|
||||
+ }
|
||||
+
|
||||
+ size_t need_more = 0;
|
||||
+ switch (sbuf[3]) {
|
||||
+ case 1:
|
||||
+ need_more = 4 + 2;
|
||||
+ break;
|
||||
+ case 4:
|
||||
+ need_more = 16 + 2;
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ r = read(upstream_fd, sbuf + total, 1);
|
||||
+ if (r != 1) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ total += r;
|
||||
+ need_more = sbuf[4] + 2;
|
||||
+ break;
|
||||
+ default:
|
||||
+ close(upstream_fd);
|
||||
+ return -EC_ADDRESSTYPE_NOT_SUPPORTED;
|
||||
+ }
|
||||
+
|
||||
+ while (total < need + need_more) {
|
||||
+ r = read(upstream_fd, sbuf + total, (need + need_more) - total);
|
||||
+ if (r <= 0) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+ total += r;
|
||||
+ }
|
||||
+
|
||||
+ if (write(client_fd, sbuf, total) != (ssize_t)total) {
|
||||
+ close(upstream_fd);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ return upstream_fd;
|
||||
+}
|
||||
+
|
||||
static struct addrinfo* addr_choose(struct addrinfo* list, union sockaddr_union* bindaddr) {
|
||||
int af = SOCKADDR_UNION_AF(bindaddr);
|
||||
if(af == AF_UNSPEC) return list;
|
||||
@@ -125,7 +242,9 @@
|
||||
return list;
|
||||
}
|
||||
|
||||
-static int connect_socks_target(unsigned char *buf, size_t n, struct client *client) {
|
||||
+static int connect_socks_target(unsigned char *buf, size_t n, struct client *client, int *used_rule) {
|
||||
+ *used_rule = 0;
|
||||
+
|
||||
if(n < 5) return -EC_GENERAL_FAILURE;
|
||||
if(buf[0] != 5) return -EC_GENERAL_FAILURE;
|
||||
if(buf[1] != 1) return -EC_COMMAND_NOT_SUPPORTED; /* we support only CONNECT method */
|
||||
@@ -158,6 +277,29 @@
|
||||
}
|
||||
unsigned short port;
|
||||
port = (buf[minlen-2] << 8) | buf[minlen-1];
|
||||
+
|
||||
+ size_t i;
|
||||
+ struct fwd_rule *rule = NULL;
|
||||
+ char original_name[256];
|
||||
+ unsigned short original_port = port;
|
||||
+ strncpy(original_name, namebuf, sizeof(original_name) - 1);
|
||||
+ original_name[sizeof(original_name) - 1] = '\0';
|
||||
+ if(fwd_rules) {
|
||||
+ for(i=0;i<sblist_getsize(fwd_rules);++i) {
|
||||
+ struct fwd_rule* r = (struct fwd_rule*)sblist_get(fwd_rules, i);
|
||||
+ int name_match = (r->match_name[0]=='\0' || strcmp(r->match_name, namebuf) == 0);
|
||||
+ int port_match = (r->match_port == 0 || r->match_port == port);
|
||||
+ if(name_match && port_match) {
|
||||
+ rule = r;
|
||||
+ *used_rule = 1;
|
||||
+ strncpy(namebuf, r->upstream_name, sizeof(namebuf)-1);
|
||||
+ namebuf[sizeof(namebuf)-1] = '\0';
|
||||
+ port = r->upstream_port;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* there's no suitable errorcode in rfc1928 for dns lookup failure */
|
||||
if(resolve(namebuf, port, &remote)) return -EC_GENERAL_FAILURE;
|
||||
struct addrinfo* raddr = addr_choose(remote, &bind_addr);
|
||||
@@ -186,6 +328,11 @@
|
||||
return -EC_GENERAL_FAILURE;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ struct timeval tv = {5, 0};
|
||||
+ setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof(tv));
|
||||
+ setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, (const char*)&tv, sizeof(tv));
|
||||
+
|
||||
if(SOCKADDR_UNION_AF(&bind_addr) == raddr->ai_family &&
|
||||
bindtoip(fd, &bind_addr) == -1)
|
||||
goto eval_errno;
|
||||
@@ -198,9 +345,22 @@
|
||||
af = SOCKADDR_UNION_AF(&client->addr);
|
||||
void *ipdata = SOCKADDR_UNION_ADDRESS(&client->addr);
|
||||
inet_ntop(af, ipdata, clientname, sizeof clientname);
|
||||
- dolog("client[%d] %s: connected to %s:%d\n", client->fd, clientname, namebuf, port);
|
||||
+ if (rule) {
|
||||
+ dolog("client[%d] %s: %s:%d -> via %s:%d\n", client->fd, clientname, original_name, original_port, rule->upstream_name, rule->upstream_port);
|
||||
+ } else {
|
||||
+ dolog("client[%d] %s: connected to %s:%d\n", client->fd, clientname, namebuf, port);
|
||||
+ }
|
||||
}
|
||||
- return fd;
|
||||
+
|
||||
+ if (rule) {
|
||||
+ int result = upstream_handshake(rule, buf, n, client->fd, fd, original_port);
|
||||
+ if (result < 0) {
|
||||
+ close(fd);
|
||||
+ return result;
|
||||
+ }
|
||||
+ return result;
|
||||
+ }
|
||||
+ return fd;
|
||||
}
|
||||
|
||||
static int is_authed(union sockaddr_union *client, union sockaddr_union *authedip) {
|
||||
@@ -322,6 +482,7 @@
|
||||
ssize_t n;
|
||||
int ret;
|
||||
enum authmethod am;
|
||||
+ int used_rule = 0;
|
||||
t->state = SS_1_CONNECTED;
|
||||
while((n = recv(t->client.fd, buf, sizeof buf, 0)) > 0) {
|
||||
switch(t->state) {
|
||||
@@ -345,12 +506,14 @@
|
||||
}
|
||||
break;
|
||||
case SS_3_AUTHED:
|
||||
- ret = connect_socks_target(buf, n, &t->client);
|
||||
+ ret = connect_socks_target(buf, n, &t->client, &used_rule);
|
||||
if(ret < 0) {
|
||||
send_error(t->client.fd, ret*-1);
|
||||
return -1;
|
||||
}
|
||||
- send_error(t->client.fd, EC_SUCCESS);
|
||||
+ if (!used_rule) {
|
||||
+ send_error(t->client.fd, EC_SUCCESS);
|
||||
+ }
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -382,11 +545,131 @@
|
||||
}
|
||||
}
|
||||
|
||||
+static short host_get_port(char *name) {
|
||||
+ int p,n;
|
||||
+ char *c;
|
||||
+ if((c = strrchr(name, ':')) && sscanf(c+1,"%d%n",&p, &n)==1 && n == (int)(strlen(c + 1)) && p >= 0 && p < USHRT_MAX)
|
||||
+ return (*c='\0'),(short)p;
|
||||
+ else
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+static int fwd_rules_add(char *str) {
|
||||
+ char *match = NULL, *upstream = NULL, *remote = NULL;
|
||||
+ unsigned short match_port, upstream_port, remote_port;
|
||||
+ int ncred;
|
||||
+
|
||||
+ if(sscanf(str, "%m[^,],%n%m[^,],%ms\n", &match, &ncred, &upstream, &remote) != 3)
|
||||
+ return 1;
|
||||
+
|
||||
+ match_port = host_get_port(match);
|
||||
+ upstream_port = host_get_port(upstream);
|
||||
+ remote_port = host_get_port(remote);
|
||||
+
|
||||
+ if(match_port < 0 || upstream_port <= 0 || remote_port < 0) {
|
||||
+ free(match);
|
||||
+ free(upstream);
|
||||
+ free(remote);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ char *match_copy = strdup(match);
|
||||
+ char *upstream_copy = strdup(upstream);
|
||||
+ char *remote_copy = strdup(remote);
|
||||
+
|
||||
+ struct fwd_rule *rule = (struct fwd_rule*)malloc(sizeof(struct fwd_rule));
|
||||
+ if (!rule) {
|
||||
+ free(match_copy);
|
||||
+ free(upstream_copy);
|
||||
+ free(remote_copy);
|
||||
+ free(match);
|
||||
+ free(upstream);
|
||||
+ free(remote);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if(strcmp(match_copy, "0.0.0.0") == 0 || strcmp(match_copy, "*") == 0) {
|
||||
+ free(match_copy);
|
||||
+ rule->match_name = strdup("");
|
||||
+ } else {
|
||||
+ rule->match_name = match_copy;
|
||||
+ }
|
||||
+ rule->match_port = match_port;
|
||||
+ rule->auth_buf = NULL;
|
||||
+ rule->auth_len = 0;
|
||||
+
|
||||
+ char *at_sign = strchr(upstream_copy, '@');
|
||||
+ if (at_sign) {
|
||||
+ *at_sign = '\0';
|
||||
+ char *auth_part = upstream_copy;
|
||||
+ char *host_part = at_sign + 1;
|
||||
+ char *colon = strchr(auth_part, ':');
|
||||
+ if (!colon) {
|
||||
+ free(rule);
|
||||
+ free(upstream_copy);
|
||||
+ free(remote_copy);
|
||||
+ free(match);
|
||||
+ free(upstream);
|
||||
+ free(remote);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ *colon++ = '\0';
|
||||
+ char *username = auth_part;
|
||||
+ char *password = colon;
|
||||
+ size_t ulen = strlen(username);
|
||||
+ size_t plen = strlen(password);
|
||||
+ if (ulen > 255 || plen > 255) {
|
||||
+ free(rule);
|
||||
+ free(upstream_copy);
|
||||
+ free(remote_copy);
|
||||
+ free(match);
|
||||
+ free(upstream);
|
||||
+ free(remote);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ rule->auth_len = 1 + 1 + ulen + 1 + plen;
|
||||
+ rule->auth_buf = malloc(rule->auth_len);
|
||||
+ rule->auth_buf[0] = 1;
|
||||
+ rule->auth_buf[1] = ulen;
|
||||
+ memcpy(&rule->auth_buf[2], username, ulen);
|
||||
+ rule->auth_buf[2 + ulen] = plen;
|
||||
+ memcpy(&rule->auth_buf[3 + ulen], password, plen);
|
||||
+ rule->upstream_name = strdup(host_part);
|
||||
+ rule->upstream_port = upstream_port;
|
||||
+ /* hide from ps */
|
||||
+ memset(str+ncred, '*', ulen+1+plen);
|
||||
+ } else {
|
||||
+ rule->upstream_name = strdup(upstream_copy);
|
||||
+ rule->upstream_port = upstream_port;
|
||||
+ }
|
||||
+
|
||||
+ free(upstream_copy);
|
||||
+ short rlen = strlen(remote_copy);
|
||||
+ rule->req_len = 3 + 1 + 1 + rlen + 2;
|
||||
+ rule->req_buf = (char*)malloc(rule->req_len);
|
||||
+ rule->req_buf[0] = 5;
|
||||
+ rule->req_buf[1] = 1;
|
||||
+ rule->req_buf[2] = 0;
|
||||
+ rule->req_buf[3] = 3;
|
||||
+ rule->req_buf[4] = rlen;
|
||||
+ memcpy(&rule->req_buf[5], remote_copy, rlen);
|
||||
+ unsigned short rport = remote_port ? remote_port : 0;
|
||||
+ rule->req_buf[5 + rlen] = (rport >> 8) & 0xFF;
|
||||
+ rule->req_buf[5 + rlen + 1] = (rport & 0xFF);
|
||||
+ free(remote_copy);
|
||||
+ sblist_add(fwd_rules, rule);
|
||||
+ free(match);
|
||||
+ free(upstream);
|
||||
+ free(remote);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int usage(void) {
|
||||
dprintf(2,
|
||||
"MicroSocks SOCKS5 Server\n"
|
||||
"------------------------\n"
|
||||
- "usage: microsocks -1 -q -i listenip -p port -u user -P pass -b bindaddr -w ips\n"
|
||||
+ "usage: microsocks -1 -q -i listenip -p port -u user -P pass -b bindaddr -w ips -f fwdrule\n"
|
||||
"all arguments are optional.\n"
|
||||
"by default listenip is 0.0.0.0 and port 1080.\n\n"
|
||||
"option -q disables logging.\n"
|
||||
@@ -401,6 +684,12 @@
|
||||
" this is handy for programs like firefox that don't support\n"
|
||||
" user/pass auth. for it to work you'd basically make one connection\n"
|
||||
" with another program that supports it, and then you can use firefox too.\n"
|
||||
+ "option -f specifies a forwarding rule of the form\n"
|
||||
+ " match_name:match_port,[user:password@]upstream_name:upstream_port,remote_name:remote_port\n"
|
||||
+ " this will cause requests that /match/ to be renamed to /remote/\n"
|
||||
+ " and sent to the /upstream/ SOCKS5 proxy server.\n"
|
||||
+ " this option may be specified multiple times.\n"
|
||||
+ "option -V prints version information and exits.\n"
|
||||
);
|
||||
return 1;
|
||||
}
|
||||
@@ -416,7 +705,7 @@
|
||||
const char *listenip = "0.0.0.0";
|
||||
char *p, *q;
|
||||
unsigned port = 1080;
|
||||
- while((ch = getopt(argc, argv, ":1qb:i:p:u:P:w:")) != -1) {
|
||||
+ while((ch = getopt(argc, argv, ":1qb:i:p:u:P:w:f:V")) != -1) {
|
||||
switch(ch) {
|
||||
case 'w': /* fall-through */
|
||||
case '1':
|
||||
@@ -456,11 +745,20 @@
|
||||
case 'p':
|
||||
port = atoi(optarg);
|
||||
break;
|
||||
+ case 'f':
|
||||
+ if(!fwd_rules)
|
||||
+ fwd_rules = sblist_new(sizeof(struct fwd_rule), 16);
|
||||
+ if(fwd_rules_add(optarg))
|
||||
+ return dprintf(2, "error: could not parse forwarding rule %s\n", optarg), 1;
|
||||
+ break;
|
||||
case ':':
|
||||
dprintf(2, "error: option -%c requires an operand\n", optopt);
|
||||
/* fall through */
|
||||
case '?':
|
||||
return usage();
|
||||
+ case 'V':
|
||||
+ dprintf(1, "MicroSocks %s\n", MICROSOCKS_VERSION);
|
||||
+ return 0;
|
||||
}
|
||||
}
|
||||
if((auth_user && !auth_pass) || (!auth_user && auth_pass)) {
|
||||
+2
-2
@@ -14,8 +14,8 @@ MISE_HASH_x86_64:=3832f39c325e343f81fe3d92b2447c5d1a5eea1bc85092bb7b6c2580622264
|
||||
MISE_HASH_aarch64:=06186cfbfe947049b21d58575fb0ea800cc26ed1375f20f4b678cb3a9d679437
|
||||
|
||||
PKG_NAME:=mise
|
||||
PKG_VERSION:=2026.10.23
|
||||
PKG_RELEASE:=46
|
||||
PKG_VERSION:=2026.10.24
|
||||
PKG_RELEASE:=47
|
||||
PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION)-linux-$(MISE_ARCH)-musl.tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/jdx/mise/releases/download/v$(PKG_VERSION)/
|
||||
PKG_HASH:=skip
|
||||
|
||||
Reference in new issue
Block a user