Quellcode durchsuchen

fix routing config on source IP

Darien Raymond vor 9 Jahren
Ursprung
Commit
2e0d54fd4c
2 geänderte Dateien mit 29 neuen und 1 gelöschten Zeilen
  1. 1 1
      tools/conf/router.go
  2. 28 0
      tools/conf/router_test.go

+ 1 - 1
tools/conf/router.go

@@ -152,7 +152,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) {
 	}
 
 	if rawFieldRule.SourceIP != nil {
-		for _, ip := range *rawFieldRule.IP {
+		for _, ip := range *rawFieldRule.SourceIP {
 			ipRule := parseIP(ip)
 			if ipRule != nil {
 				rule.SourceCidr = append(rule.SourceCidr, ipRule)

+ 28 - 0
tools/conf/router_test.go

@@ -135,3 +135,31 @@ func TestIPRule(t *testing.T) {
 		Destination: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80),
 	})).IsTrue()
 }
+
+func TestSourceIPRule(t *testing.T) {
+	assert := assert.On(t)
+
+	rule := ParseRule([]byte(`{
+    "type": "field",
+    "source": [
+      "10.0.0.0/8",
+      "192.0.0.0/24"
+    ],
+    "outboundTag": "direct"
+  }`))
+	assert.Pointer(rule).IsNotNil()
+	cond, err := rule.BuildCondition()
+	assert.Error(err).IsNil()
+	assert.Bool(cond.Apply(&proxy.SessionInfo{
+		Source: v2net.TCPDestination(v2net.DomainAddress("www.ooxx.com"), 80),
+	})).IsFalse()
+	assert.Bool(cond.Apply(&proxy.SessionInfo{
+		Source: v2net.TCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}), 80),
+	})).IsTrue()
+	assert.Bool(cond.Apply(&proxy.SessionInfo{
+		Source: v2net.TCPDestination(v2net.IPAddress([]byte{127, 0, 0, 1}), 80),
+	})).IsFalse()
+	assert.Bool(cond.Apply(&proxy.SessionInfo{
+		Source: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80),
+	})).IsTrue()
+}