remove unused param, add ipv6nat
authorIan Kelling <iank@fsf.org>
Sat, 7 Nov 2020 17:42:17 +0000 (12:42 -0500)
committerIan Kelling <iank@fsf.org>
Sat, 7 Nov 2020 17:42:17 +0000 (12:42 -0500)
vpn-server-setup

index 8cfe54576aaeb0d4bd945924553b330661e71b2f..797594620aa416921054df9076af86959ed7bdba 100755 (executable)
@@ -21,14 +21,16 @@ trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
 
 usage() {
   cat <<'EOF'
-usage: ${0##*/} [OPTIONS] [IPV6_ADDR/BITS IPV6_DEFAULT_ROUTE]
-
--4  I prefix of range for ipv4, default 10.8.0
--d  Do not push dns
--n  Name. default = server. 2 servers on the same host need different names.
--p  Port. default 1194
--r  Do not push default route
--s  Do not start openvpn
+usage: ${0##*/} [OPTIONS] [IPV6_ADDR/BITS]
+
+-4   Prefix of range for ipv4, default 10.8.0
+-6  IP6_NETWORK  Do ip6 nat for this network. ipv6 will work without nat,
+     but you may want it in certain circumstances.
+-d   Do not push dns
+-n  NAME  default = server. 2 servers on the same host need different names.
+-p  PORT  default 1194
+-r   Do not push default route
+-s   Do not start openvpn
 -h --help print help
 
 Sets up a vpn server which pushes gateway route and dns server so all
@@ -54,11 +56,12 @@ route=true
 start=true
 ip4=10.8.0
 name=server
-temp=$(getopt -l help 4:dn:p:rsh "$@") || usage 1
+temp=$(getopt -l help 4:6:dn:p:rsh "$@") || usage 1
 eval set -- "$temp"
 while true; do
   case $1 in
     -4) ip4=$2; shift 2 ;;
+    -6) ip6net=$2; shift 2 ;;
     -d) dns=false; shift ;;
     -n) name=$2; shift 2 ;;
     -p) port=$2; shift 2 ;;
@@ -220,7 +223,8 @@ fi
 if [[ $ip6 ]]; then
   cat >>$conf <<EOF
 push tun-ipv6 # legacy option that flidas needs, has no harm.
-ifconfig-ipv6 $ip6 $ip6route
+# the ::1 is not used, i just put a short valid address there
+ifconfig-ipv6 $ip6 ::1
 EOF
 
   sed -i --follow-symlinks '/^ *net.ipv6.conf.all.forwarding=.*/d' /etc/sysctl.conf
@@ -261,14 +265,21 @@ cat >/etc/systemd/system/vpnnat.service <<EOF
 [Unit]
 Description=Turns on nat iptables setting
 
+[Install]
+WantedBy=$vpn_service.service
+
 [Service]
 Type=oneshot
 RemainAfterExit=yes
 ExecStart=/sbin/iptables -t nat -A POSTROUTING -s $ip4.0/24 -o $gw -j MASQUERADE
 ExecStop=/sbin/iptables -t nat -D POSTROUTING -s $ip4.0/24 -o $gw -j MASQUERADE
+EOF
 
-[Install]
-WantedBy=$vpn_service.service
+
+if [[ $ip6net ]]; then
+  cat >>/etc/systemd/system/vpnnat.service <<EOF
+ExecStart=/sbin/ip6tables -t nat -A POSTROUTING -s $ip6net -o $gw -j MASQUERADE
+ExecStop=/sbin/ip6tables -t nat -D POSTROUTING -s $ip6net -o $gw -j MASQUERADE
 EOF
 systemctl daemon-reload # needed if the file was already there
 # note, no need to start it, the vpn_service does that.