dns.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. func SetDNS(nameserver string) error {
  12. bytes, err := ioutil.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. func UpdateDNS(ifacename string, network string, nameserver string) error {
  31. if ncutils.IsWindows() {
  32. return nil
  33. }
  34. _, err := exec.LookPath("resolvectl")
  35. if err != nil {
  36. log.Println(err)
  37. log.Println("WARNING: resolvectl not present. Unable to set dns. Install resolvectl or run manually.")
  38. } else {
  39. _, err = ncutils.RunCmd("resolvectl domain "+ifacename+" ~"+network, true)
  40. if err != nil {
  41. log.Println("WARNING: Error encountered setting domain on dns. Aborted setting dns.")
  42. } else {
  43. _, err = ncutils.RunCmd("resolvectl default-route "+ifacename+" false", true)
  44. if err != nil {
  45. log.Println("WARNING: Error encountered setting default-route on dns. Aborted setting dns.")
  46. } else {
  47. _, err = ncutils.RunCmd("resolvectl dns "+ifacename+" "+nameserver, true)
  48. if err != nil {
  49. log.Println("WARNING: Error encountered running resolvectl dns " + ifacename + " " + nameserver)
  50. }
  51. }
  52. }
  53. }
  54. return err
  55. }