mirror of
				https://github.com/angristan/openvpn-install.git
				synced 2025-11-04 07:57:37 +01:00 
			
		
		
		
	Backport improvements of external IP handling (#213)
* [backport] Remove IP address detection fallback It was never used, the one-liner is enough. * [backport] Improve NAT detection Cleaner and better: - Not relying in an external service - Avoids a false positive when the server has multiple public IPv4 addresses and the user selects one which is not the default gateway
This commit is contained in:
		
				
					committed by
					
						
						Angristan
					
				
			
			
				
	
			
			
			
						parent
						
							b3fba4fddc
						
					
				
				
					commit
					d2a3b3bec6
				
			@@ -83,13 +83,6 @@ newclient () {
 | 
			
		||||
	echo "</tls-auth>" >> $homeDir/$1.ovpn
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Try to get our IP from the system and fallback to the Internet.
 | 
			
		||||
# I do this to make the script compatible with NATed servers (LowEndSpirit/Scaleway)
 | 
			
		||||
# and to avoid getting an IPv6.
 | 
			
		||||
IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
 | 
			
		||||
if [[ "$IP" = "" ]]; then
 | 
			
		||||
	IP=$(wget -qO- ipv4.icanhazip.com)
 | 
			
		||||
fi
 | 
			
		||||
# Get Internet network interface with default route
 | 
			
		||||
NIC=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
 | 
			
		||||
 | 
			
		||||
@@ -220,10 +213,18 @@ else
 | 
			
		||||
	echo "I need to know the IPv4 address of the network interface you want OpenVPN listening to."
 | 
			
		||||
	echo "If your server is running behind a NAT, (e.g. LowEndSpirit, Scaleway) leave the IP address as it is. (local/private IP)"
 | 
			
		||||
	echo "Otherwise, it should be your public IPv4 address."
 | 
			
		||||
	# Autodetect IP address and pre-fill for the user
 | 
			
		||||
	IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
 | 
			
		||||
	read -p "IP address: " -e -i $IP IP
 | 
			
		||||
	echo ""
 | 
			
		||||
	echo "What port do you want for OpenVPN?"
 | 
			
		||||
	read -p "Port: " -e -i 1194 PORT
 | 
			
		||||
	# If $IP is a private IP address, the server must be behind NAT
 | 
			
		||||
	if echo "$IP" | grep -qE '^(10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.|192\.168)'; then
 | 
			
		||||
		echo ""
 | 
			
		||||
		echo "This server is behind NAT. What is the public IPv4 address or hostname?"
 | 
			
		||||
		read -p "Public IP address / hostname: " -e PUBLICIP
 | 
			
		||||
	fi
 | 
			
		||||
	echo ""
 | 
			
		||||
	echo "What protocol do you want for OpenVPN?"
 | 
			
		||||
	echo "Unless UDP is blocked, you should not use TCP (unnecessarily slower)"
 | 
			
		||||
@@ -661,19 +662,9 @@ verb 3" >> /etc/openvpn/server.conf
 | 
			
		||||
			chkconfig openvpn on
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
	# Try to detect a NATed connection and ask about it to potential LowEndSpirit/Scaleway users
 | 
			
		||||
	EXTERNALIP=$(wget -qO- ipv4.icanhazip.com)
 | 
			
		||||
	if [[ "$IP" != "$EXTERNALIP" ]]; then
 | 
			
		||||
		echo ""
 | 
			
		||||
		echo "Looks like your server is behind a NAT!"
 | 
			
		||||
		echo ""
 | 
			
		||||
        echo "If your server is NATed (e.g. LowEndSpirit, Scaleway, or behind a router),"
 | 
			
		||||
        echo "then I need to know the address that can be used to access it from outside."
 | 
			
		||||
        echo "If that's not the case, just ignore this and leave the next field blank"
 | 
			
		||||
        read -p "External IP or domain name: " -e USEREXTERNALIP
 | 
			
		||||
		if [[ "$USEREXTERNALIP" != "" ]]; then
 | 
			
		||||
			IP=$USEREXTERNALIP
 | 
			
		||||
		fi
 | 
			
		||||
	# If the server is behind a NAT, use the correct IP address
 | 
			
		||||
	if [[ "$PUBLICIP" != "" ]]; then
 | 
			
		||||
		IP=$PUBLICIP
 | 
			
		||||
	fi
 | 
			
		||||
	# client-template.txt is created so we have a template to add further users later
 | 
			
		||||
	echo "client" > /etc/openvpn/client-template.txt
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user