dns.go 1.7 KB

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