浏览代码

Reply on server port if request is a relay

If the request comes from an ephemeral source port, the server will
reply on such port. However the relay will be listening on server port
instead, so the reply is dropped. With this patch the reply always goes
to the server port if the request is a relay.

Signed-off-by: Andrea Barberio <insomniac@slackware.it>
Andrea Barberio 6 年之前
父节点
当前提交
2bf829493e
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      coredhcp.go

+ 8 - 1
coredhcp.go

@@ -160,7 +160,14 @@ func (s *Server) MainHandler6(conn net.PacketConn, peer net.Addr, req dhcpv6.DHC
 		resp = tmp
 	}
 
-	if _, err := conn.WriteTo(resp.ToBytes(), peer); err != nil {
+	var newPeer = peer
+	if req.IsRelay() {
+		newPeer = &net.UDPAddr{
+			IP:   peer.(*net.UDPAddr).IP,
+			Port: dhcpv6.DefaultServerPort,
+		}
+	}
+	if _, err := conn.WriteTo(resp.ToBytes(), newPeer); err != nil {
 		log.Printf("MainHandler6: conn.Write to %v failed: %v", peer, err)
 	}
 }