X-Git-Url: https://iankelling.org/git/?p=vpn-setup;a=blobdiff_plain;f=vpn-server-setup;h=a311ba8d0ae09bbc3f543921af3b06a07451fbbd;hp=bbfd41b8687c9ab31f9c1176b07f32610b7823f7;hb=e4c2b65e04673dc12575e4c1a182fe86e3dc219a;hpb=db7cd23a75387ecb417b4b621d6610bc6ff4eb6d diff --git a/vpn-server-setup b/vpn-server-setup index bbfd41b..a311ba8 100755 --- a/vpn-server-setup +++ b/vpn-server-setup @@ -20,8 +20,8 @@ trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR [[ $EUID == 0 ]] || exec sudo -E "$BASH_SOURCE" "$@" usage() { - cat <<'EOF' -usage: ${0##*/} [-d|-h|--help] + cat <<'EOF' +usage: ${0##*/} [-d|-h|--help] [IPV6_ADDR/BITS IPV6_DEFAULT_ROUTE] -r Do not push default route -d Do not push dns @@ -32,12 +32,18 @@ Sets up a vpn server which pushes gateway route and dns server so all traffic goes through the vpn. requires systemd, and might have some debian specific paths. +For ipv6, we assume ipv6_addr routes to the server. + You can save all the keys by storing /etc/openvpn/easy-rsa/keys, and the script will not generate them if it sees they exist already. +For future updates to this script, this is a good place to +take inspiration. +https://github.com/angristan/openvpn-install/blob/master/openvpn-install.sh + Note: Uses GNU getopt options parsing style EOF - exit $1 + exit $1 } dns=true @@ -46,47 +52,77 @@ start=true temp=$(getopt -l help drsh "$@") || usage 1 eval set -- "$temp" while true; do - case $1 in - -d) dns=false; shift ;; - -r) route=false; shift ;; - -s) start=false; shift ;; - -h|--help) usage ;; - --) shift; break ;; - *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;; - esac + case $1 in + -d) dns=false; shift ;; + -r) route=false; shift ;; + -s) start=false; shift ;; + -h|--help) usage ;; + --) shift; break ;; + *) echo "$0: Internal error! unexpected args: $*" ; exit 1 ;; + esac done +read -r ip6 ip6route <<<"$@" + + apt-get update -# suggests get's us openssl +# suggests get's us openssl. policy-rc.d is to prevent install from starting services +f=/usr/sbin/policy-rc.d; +dd of=$f <>$server_dir/server.conf <<'EOF' @@ -153,27 +187,43 @@ mkdir -p /etc/openvpn/client-config if $dns; then - # Be the dns server for clients - cat >>$server_dir/server.conf <<'EOF' + # Be the dns server for clients + cat >>$server_dir/server.conf <<'EOF' push "dhcp-option DNS 10.8.0.1" EOF fi +if $ip6; then + cat >>$server_dir/server.conf <>$server_dir/server.conf <<'EOF' + cat >>$server_dir/server.conf <<'EOF' # Be the default gateway for clients. push "redirect-gateway def1" EOF - echo "1" > /proc/sys/net/ipv4/ip_forward - sed -i --follow-symlinks '/^ *net\.ipv4\.ip_forward=.*/d' /etc/sysctl.conf - cat >>/etc/sysctl.conf <<'EOF' -net.ipv4.ip_forward=1 + if $ip6; then + cat >>$server_dir/server.conf <<'EOF' +push "route-ipv6 2000::/3" EOF + fi +fi +sed -i --follow-symlinks '/^ *net\.ipv4\.ip_forward=.*/d' /etc/sysctl.conf +sed -i --follow-symlinks '/^ *net.ipv6.conf.all.forwarding=.*/d' /etc/sysctl.conf +cat >>/etc/sysctl.conf <<'EOF' +net.ipv4.ip_forward=1 +net.ipv6.conf.all.forwarding=1 +EOF +sysctl -p /etc/sysctl.conf - gw=$(ip route | sed -rn 's/^default via .* dev (\S+).*/\1/p') +gw=$(ip route | sed -rn 's/^default via .* dev (\S+).*/\1/p') - cat >/etc/systemd/system/vpnnat.service </etc/systemd/system/vpnnat.service <