cjdns.defaults 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/bin/sh
  2. # if there is an existing config, our work is already done
  3. uci get cjdns.cjdns.ipv6 >/dev/null 2>&1
  4. if [ $? -ne 0 ]; then
  5. # generate configuration
  6. touch /etc/config/cjdns
  7. cjdroute --genconf | cjdroute --cleanconf | cjdrouteconf set
  8. # make sure config is present (might fail for any reason)
  9. uci get cjdns.cjdns.ipv6 >/dev/null 2>&1
  10. if [ $? -ne 0 ]; then
  11. exit 1
  12. fi
  13. # enable auto-peering on ethernet interface lan, if existing
  14. ifname=$(uci -q get network.lan.device || \
  15. ([ "$(uci -q get network.lan.type)" == "bridge" ] && echo br-lan) || \
  16. uci -q get network.lan.ifname)
  17. if [ -n "$ifname" ]; then
  18. uci -q batch <<-EOF >/dev/null
  19. add cjdns eth_interface
  20. set cjdns.@eth_interface[-1].beacon=2
  21. set cjdns.@eth_interface[-1].bind=$ifname
  22. EOF
  23. fi
  24. # set the tun interface name
  25. uci set cjdns.cjdns.tun_device=tuncjdns
  26. # create the network interface
  27. uci -q batch <<-EOF >/dev/null
  28. set network.cjdns=interface
  29. set network.cjdns.device=tuncjdns
  30. set network.cjdns.proto=none
  31. EOF
  32. # firewall rules by @dangowrt -- thanks <3
  33. # create the firewall zone
  34. uci -q batch <<-EOF >/dev/null
  35. add firewall zone
  36. set firewall.@zone[-1].name=cjdns
  37. add_list firewall.@zone[-1].network=cjdns
  38. set firewall.@zone[-1].input=REJECT
  39. set firewall.@zone[-1].output=ACCEPT
  40. set firewall.@zone[-1].forward=REJECT
  41. set firewall.@zone[-1].conntrack=1
  42. set firewall.@zone[-1].family=ipv6
  43. EOF
  44. # allow ICMP from cjdns zone, e.g. ping6
  45. uci -q batch <<-EOF >/dev/null
  46. add firewall rule
  47. set firewall.@rule[-1].name='Allow-ICMPv6-cjdns'
  48. set firewall.@rule[-1].src=cjdns
  49. set firewall.@rule[-1].proto=icmp
  50. add_list firewall.@rule[-1].icmp_type=echo-request
  51. add_list firewall.@rule[-1].icmp_type=echo-reply
  52. add_list firewall.@rule[-1].icmp_type=destination-unreachable
  53. add_list firewall.@rule[-1].icmp_type=packet-too-big
  54. add_list firewall.@rule[-1].icmp_type=time-exceeded
  55. add_list firewall.@rule[-1].icmp_type=bad-header
  56. add_list firewall.@rule[-1].icmp_type=unknown-header-type
  57. set firewall.@rule[-1].limit='1000/sec'
  58. set firewall.@rule[-1].family=ipv6
  59. set firewall.@rule[-1].target=ACCEPT
  60. EOF
  61. # allow SSH from cjdns zone, needs to be explicitly enabled
  62. uci -q batch <<-EOF >/dev/null
  63. add firewall rule
  64. set firewall.@rule[-1].enabled=0
  65. set firewall.@rule[-1].name='Allow-SSH-cjdns'
  66. set firewall.@rule[-1].src=cjdns
  67. set firewall.@rule[-1].proto=tcp
  68. set firewall.@rule[-1].dest_port=22
  69. set firewall.@rule[-1].target=ACCEPT
  70. EOF
  71. # allow LuCI access from cjdns zone, needs to be explicitly enabled
  72. uci -q batch <<-EOF >/dev/null
  73. add firewall rule
  74. set firewall.@rule[-1].enabled=0
  75. set firewall.@rule[-1].name='Allow-HTTP-cjdns'
  76. set firewall.@rule[-1].src=cjdns
  77. set firewall.@rule[-1].proto=tcp
  78. set firewall.@rule[-1].dest_port=80
  79. set firewall.@rule[-1].target=ACCEPT
  80. EOF
  81. # allow UDP peering from wan zone, if it exists
  82. uci show network.wan >/dev/null 2>&1
  83. if [ $? -eq 0 ]; then
  84. peeringPort=`uci get cjdns.@udp_interface[0].port`
  85. uci -q batch <<-EOF >/dev/null
  86. add firewall rule
  87. set firewall.@rule[-1].name='Allow-cjdns-wan'
  88. set firewall.@rule[-1].src=wan
  89. set firewall.@rule[-1].proto=udp
  90. set firewall.@rule[-1].dest_port=$peeringPort
  91. set firewall.@rule[-1].target=ACCEPT
  92. EOF
  93. fi
  94. uci commit cjdns
  95. uci commit firewall
  96. uci commit network
  97. fi
  98. exit 0