dns.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. )
  10. func SetDNS(nameserver string) error {
  11. bytes, err := ioutil.ReadFile("/etc/resolv.conf")
  12. if err != nil {
  13. return err
  14. }
  15. resolvstring := string(bytes)
  16. // //check whether s contains substring text
  17. hasdns := strings.Contains(resolvstring, nameserver)
  18. if hasdns {
  19. return nil
  20. }
  21. resolv, err := os.OpenFile("/etc/resolv.conf", os.O_APPEND|os.O_WRONLY, 0644)
  22. if err != nil {
  23. return err
  24. }
  25. defer resolv.Close()
  26. _, err = resolv.WriteString("nameserver " + nameserver + "\n")
  27. return err
  28. }
  29. func UpdateDNS(ifacename string, network string, nameserver string) error {
  30. _, err := exec.LookPath("resolvectl")
  31. if err != nil {
  32. log.Println(err)
  33. log.Println("WARNING: resolvectl not present. Unable to set dns. Install resolvectl or run manually.")
  34. } else {
  35. _, err = RunCmd("resolvectl domain " + ifacename + " ~" + network)
  36. if err != nil {
  37. log.Println(err)
  38. log.Println("WARNING: Error encountered setting domain on dns. Aborted setting dns.")
  39. } else {
  40. _, err = RunCmd("resolvectl default-route " + ifacename + " false")
  41. if err != nil {
  42. log.Println(err)
  43. log.Println("WARNING: Error encountered setting default-route on dns. Aborted setting dns.")
  44. } else {
  45. _, err = RunCmd("resolvectl dns " + ifacename + " " + nameserver)
  46. if err != nil {
  47. log.Println("WARNING: Error encountered running resolvectl dns " + ifacename + " " + nameserver)
  48. log.Println(err)
  49. }
  50. }
  51. }
  52. }
  53. return err
  54. }