dns.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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/netclientutils"
  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 netclientutils.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 = RunCmd("resolvectl domain " + ifacename + " ~" + network)
  40. if err != nil {
  41. log.Println(err)
  42. log.Println("WARNING: Error encountered setting domain on dns. Aborted setting dns.")
  43. } else {
  44. _, err = RunCmd("resolvectl default-route " + ifacename + " false")
  45. if err != nil {
  46. log.Println(err)
  47. log.Println("WARNING: Error encountered setting default-route on dns. Aborted setting dns.")
  48. } else {
  49. _, err = RunCmd("resolvectl dns " + ifacename + " " + nameserver)
  50. if err != nil {
  51. log.Println("WARNING: Error encountered running resolvectl dns " + ifacename + " " + nameserver)
  52. log.Println(err)
  53. }
  54. }
  55. }
  56. }
  57. return err
  58. }