mirror of
				https://github.com/nadoo/glider.git
				synced 2025-11-04 07:42:38 +08:00 
			
		
		
		
	ipset: do not create ipset when ipset name is ""
This commit is contained in:
		
							parent
							
								
									ada5cdfcc3
								
							
						
					
					
						commit
						4729fc57f3
					
				@ -32,8 +32,8 @@ General:
 | 
				
			|||||||
TODO:
 | 
					TODO:
 | 
				
			||||||
- [x] Specify different remote dns server in rule file
 | 
					- [x] Specify different remote dns server in rule file
 | 
				
			||||||
- [x] Improve DNS forwarder to resolve domain name and add ip to proxy rules
 | 
					- [x] Improve DNS forwarder to resolve domain name and add ip to proxy rules
 | 
				
			||||||
- [ ] IPSet management
 | 
					- [x] IPSet management
 | 
				
			||||||
- [ ] Improve DNS forwarder to resolve domain name and add ip to ipset
 | 
					- [x] Improve DNS forwarder to resolve domain name and add ip to ipset
 | 
				
			||||||
- [ ] UDP Tunnel & UDP Relay
 | 
					- [ ] UDP Tunnel & UDP Relay
 | 
				
			||||||
- [ ] TUN/TAP device support
 | 
					- [ ] TUN/TAP device support
 | 
				
			||||||
- [ ] Code refactoring: support proxy registering so it can be pluggable
 | 
					- [ ] Code refactoring: support proxy registering so it can be pluggable
 | 
				
			||||||
 | 
				
			|||||||
@ -76,6 +76,11 @@ func NewIPSetManager(rules []*RuleConf) (*IPSetManager, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	var domainSet sync.Map
 | 
						var domainSet sync.Map
 | 
				
			||||||
	for _, r := range rules {
 | 
						for _, r := range rules {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if r.IPSet == "" {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		CreateSet(fd, lsa, r.IPSet)
 | 
							CreateSet(fd, lsa, r.IPSet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		for _, domain := range r.Domain {
 | 
							for _, domain := range r.Domain {
 | 
				
			||||||
@ -99,9 +104,8 @@ func NewIPSetManager(rules []*RuleConf) (*IPSetManager, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// AddDomainIP used to update ipset according to domainSet rule
 | 
					// AddDomainIP used to update ipset according to domainSet rule
 | 
				
			||||||
func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
					func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
				
			||||||
	if ip != "" {
 | 
					 | 
				
			||||||
		logf("domain: %s, ip: %s\n", domain, ip)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ip != "" {
 | 
				
			||||||
		domainParts := strings.Split(domain, ".")
 | 
							domainParts := strings.Split(domain, ".")
 | 
				
			||||||
		length := len(domainParts)
 | 
							length := len(domainParts)
 | 
				
			||||||
		for i := length - 2; i >= 0; i-- {
 | 
							for i := length - 2; i >= 0; i-- {
 | 
				
			||||||
@ -110,6 +114,7 @@ func (m *IPSetManager) AddDomainIP(domain, ip string) error {
 | 
				
			|||||||
			// find in domainMap
 | 
								// find in domainMap
 | 
				
			||||||
			if ipset, ok := m.domainSet.Load(domain); ok {
 | 
								if ipset, ok := m.domainSet.Load(domain); ok {
 | 
				
			||||||
				AddToSet(m.fd, m.lsa, ipset.(string), ip)
 | 
									AddToSet(m.fd, m.lsa, ipset.(string), ip)
 | 
				
			||||||
 | 
									logf("ipset: domain: %s, ip: %s\n", domain, ip)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -148,9 +153,12 @@ func CreateSet(fd int, lsa syscall.SockaddrNetlink, setName string) {
 | 
				
			|||||||
	req.AddData(attrData)
 | 
						req.AddData(attrData)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := syscall.Sendto(fd, req.Serialize(), 0, &lsa)
 | 
						err := syscall.Sendto(fd, req.Serialize(), 0, &lsa)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
		logf("%s", err)
 | 
							logf("%s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func AddToSet(fd int, lsa syscall.SockaddrNetlink, setName, ipStr string) {
 | 
					func AddToSet(fd int, lsa syscall.SockaddrNetlink, setName, ipStr string) {
 | 
				
			||||||
	if len(setName) > IPSET_MAXNAMELEN {
 | 
						if len(setName) > IPSET_MAXNAMELEN {
 | 
				
			||||||
		logf("ipset name too long")
 | 
							logf("ipset name too long")
 | 
				
			||||||
@ -177,8 +185,10 @@ func AddToSet(fd int, lsa syscall.SockaddrNetlink, setName, ipStr string) {
 | 
				
			|||||||
	req.AddData(attrNested)
 | 
						req.AddData(attrNested)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err := syscall.Sendto(fd, req.Serialize(), 0, &lsa)
 | 
						err := syscall.Sendto(fd, req.Serialize(), 0, &lsa)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
		logf("%s", err)
 | 
							logf("%s", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Get native endianness for the system
 | 
					// Get native endianness for the system
 | 
				
			||||||
func NativeEndian() binary.ByteOrder {
 | 
					func NativeEndian() binary.ByteOrder {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								rule.go
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								rule.go
									
									
									
									
									
								
							@ -113,8 +113,6 @@ func (rd *RuleDialer) Dial(network, addr string) (net.Conn, error) {
 | 
				
			|||||||
// AddDomainIP used to update ipMap rules according to domainMap rule
 | 
					// AddDomainIP used to update ipMap rules according to domainMap rule
 | 
				
			||||||
func (rd *RuleDialer) AddDomainIP(domain, ip string) error {
 | 
					func (rd *RuleDialer) AddDomainIP(domain, ip string) error {
 | 
				
			||||||
	if ip != "" {
 | 
						if ip != "" {
 | 
				
			||||||
		logf("domain: %s, ip: %s\n", domain, ip)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		domainParts := strings.Split(domain, ".")
 | 
							domainParts := strings.Split(domain, ".")
 | 
				
			||||||
		length := len(domainParts)
 | 
							length := len(domainParts)
 | 
				
			||||||
		for i := length - 2; i >= 0; i-- {
 | 
							for i := length - 2; i >= 0; i-- {
 | 
				
			||||||
@ -123,6 +121,7 @@ func (rd *RuleDialer) AddDomainIP(domain, ip string) error {
 | 
				
			|||||||
			// find in domainMap
 | 
								// find in domainMap
 | 
				
			||||||
			if d, ok := rd.domainMap.Load(domain); ok {
 | 
								if d, ok := rd.domainMap.Load(domain); ok {
 | 
				
			||||||
				rd.ipMap.Store(ip, d)
 | 
									rd.ipMap.Store(ip, d)
 | 
				
			||||||
 | 
									logf("rule: add domain: %s, ip: %s\n", domain, ip)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user