fix: fix clientIP config

This commit is contained in:
秋のかえで 2021-04-02 16:57:31 +08:00
parent 364086c974
commit 90c81e8459
No known key found for this signature in database
GPG key ID: C687746B27587C0D
2 changed files with 13 additions and 0 deletions

View file

@ -12,6 +12,7 @@ import (
type NameServerConfig struct { type NameServerConfig struct {
Address *Address Address *Address
ClientIP *Address
Port uint16 Port uint16
Domains []string Domains []string
ExpectIPs StringList ExpectIPs StringList
@ -26,12 +27,14 @@ func (c *NameServerConfig) UnmarshalJSON(data []byte) error {
var advanced struct { var advanced struct {
Address *Address `json:"address"` Address *Address `json:"address"`
ClientIP *Address `json:"clientIp"`
Port uint16 `json:"port"` Port uint16 `json:"port"`
Domains []string `json:"domains"` Domains []string `json:"domains"`
ExpectIPs StringList `json:"expectIps"` ExpectIPs StringList `json:"expectIps"`
} }
if err := json.Unmarshal(data, &advanced); err == nil { if err := json.Unmarshal(data, &advanced); err == nil {
c.Address = advanced.Address c.Address = advanced.Address
c.ClientIP = advanced.ClientIP
c.Port = advanced.Port c.Port = advanced.Port
c.Domains = advanced.Domains c.Domains = advanced.Domains
c.ExpectIPs = advanced.ExpectIPs c.ExpectIPs = advanced.ExpectIPs
@ -87,12 +90,20 @@ func (c *NameServerConfig) Build() (*dns.NameServer, error) {
return nil, newError("invalid IP rule: ", c.ExpectIPs).Base(err) return nil, newError("invalid IP rule: ", c.ExpectIPs).Base(err)
} }
var myClientIP []byte
if c.ClientIP != nil {
if !c.ClientIP.Family().IsIP() {
return nil, newError("not an IP address:", c.ClientIP.String())
}
myClientIP = []byte(c.ClientIP.IP())
}
return &dns.NameServer{ return &dns.NameServer{
Address: &net.Endpoint{ Address: &net.Endpoint{
Network: net.Network_UDP, Network: net.Network_UDP,
Address: c.Address.Build(), Address: c.Address.Build(),
Port: uint32(c.Port), Port: uint32(c.Port),
}, },
ClientIp: myClientIP,
PrioritizedDomain: domains, PrioritizedDomain: domains,
Geoip: geoipList, Geoip: geoipList,
OriginalRules: originalRules, OriginalRules: originalRules,

View file

@ -67,6 +67,7 @@ func TestDNSConfigParsing(t *testing.T) {
Input: `{ Input: `{
"servers": [{ "servers": [{
"address": "8.8.8.8", "address": "8.8.8.8",
"clientIp": "10.0.0.1",
"port": 5353, "port": 5353,
"domains": ["domain:example.com"] "domains": ["domain:example.com"]
}], }],
@ -94,6 +95,7 @@ func TestDNSConfigParsing(t *testing.T) {
Network: net.Network_UDP, Network: net.Network_UDP,
Port: 5353, Port: 5353,
}, },
ClientIp: []byte{10, 0, 0, 1},
PrioritizedDomain: []*dns.NameServer_PriorityDomain{ PrioritizedDomain: []*dns.NameServer_PriorityDomain{
{ {
Type: dns.DomainMatchingType_Subdomain, Type: dns.DomainMatchingType_Subdomain,