dns.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package local
  2. import (
  3. "os"
  4. "strings"
  5. //"github.com/davecgh/go-spew/spew"
  6. "log"
  7. "os/exec"
  8. "github.com/gravitl/netmaker/netclient/ncutils"
  9. )
  10. // SetDNS - sets the DNS of a local machine
  11. func SetDNS(nameserver string) error {
  12. bytes, err := os.ReadFile("/etc/resolv.conf")
  13. if err != nil {
  14. return err
  15. }
  16. resolvstring := string(bytes)
  17. // //check whether s contains substring text
  18. hasdns := strings.Contains(resolvstring, nameserver)
  19. if hasdns {
  20. return nil
  21. }
  22. resolv, err := os.OpenFile("/etc/resolv.conf", os.O_APPEND|os.O_WRONLY, 0644)
  23. if err != nil {
  24. return err
  25. }
  26. defer resolv.Close()
  27. _, err = resolv.WriteString("nameserver " + nameserver + "\n")
  28. return err
  29. }
  30. // UpdateDNS - updates local DNS of client
  31. func UpdateDNS(ifacename string, network string, nameserver string) error {
  32. if ncutils.IsWindows() {
  33. return nil
  34. }
  35. _, err := exec.LookPath("resolvectl")
  36. if err != nil {
  37. log.Println(err)
  38. log.Println("WARNING: resolvectl not present. Unable to set dns. Install resolvectl or run manually.")
  39. } else {
  40. _, err = ncutils.RunCmd("resolvectl domain "+ifacename+" ~"+network, true)
  41. if err != nil {
  42. log.Println("WARNING: Error encountered setting domain on dns. Aborted setting dns.")
  43. } else {
  44. _, err = ncutils.RunCmd("resolvectl default-route "+ifacename+" false", true)
  45. if err != nil {
  46. log.Println("WARNING: Error encountered setting default-route on dns. Aborted setting dns.")
  47. } else {
  48. _, err = ncutils.RunCmd("resolvectl dns "+ifacename+" "+nameserver, true)
  49. if err != nil {
  50. log.Println("WARNING: Error encountered running resolvectl dns " + ifacename + " " + nameserver)
  51. }
  52. }
  53. }
  54. }
  55. return err
  56. }