forked from FoundKeyGang/FoundKey
Fix: IPv4 onlyホストからDualstackホストにAP deliverできない (#4872)
This commit is contained in:
parent
4cd451c613
commit
96f675abed
3 changed files with 16 additions and 4 deletions
|
@ -149,3 +149,6 @@ autoAdmin: true
|
||||||
|
|
||||||
# Clustering
|
# Clustering
|
||||||
#clusterLimit: 1
|
#clusterLimit: 1
|
||||||
|
|
||||||
|
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
||||||
|
#outgoingAddressFamily: ipv4
|
||||||
|
|
|
@ -44,6 +44,8 @@ export type Source = {
|
||||||
clusterLimit?: number;
|
clusterLimit?: number;
|
||||||
|
|
||||||
id: string;
|
id: string;
|
||||||
|
|
||||||
|
outgoingAddressFamily?: 'ipv4' | 'ipv6' | 'dual';
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -101,11 +101,18 @@ export default async (user: ILocalUser, url: string, object: any) => {
|
||||||
* Resolve host (with cached, asynchrony)
|
* Resolve host (with cached, asynchrony)
|
||||||
*/
|
*/
|
||||||
async function resolveAddr(domain: string) {
|
async function resolveAddr(domain: string) {
|
||||||
|
const af = config.outgoingAddressFamily || 'ipv4';
|
||||||
|
const useV4 = af == 'ipv4' || af == 'dual';
|
||||||
|
const useV6 = af == 'ipv6' || af == 'dual';
|
||||||
|
|
||||||
|
const promises = [];
|
||||||
|
|
||||||
|
if (!useV4 && !useV6) throw 'No usable address family available';
|
||||||
|
if (useV4) promises.push(resolveAddrInner(domain, { family: 4 }));
|
||||||
|
if (useV6) promises.push(resolveAddrInner(domain, { family: 6 }));
|
||||||
|
|
||||||
// v4/v6で先に取得できた方を採用する
|
// v4/v6で先に取得できた方を採用する
|
||||||
return await promiseAny([
|
return await promiseAny(promises);
|
||||||
resolveAddrInner(domain, { family: 4 }),
|
|
||||||
resolveAddrInner(domain, { family: 6 })
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function resolveAddrInner(domain: string, options: IRunOptions = {}): Promise<string> {
|
function resolveAddrInner(domain: string, options: IRunOptions = {}): Promise<string> {
|
||||||
|
|
Loading…
Reference in a new issue