Public/New-VIPRange.ps1

#Required by functions
#New-P2PTunnelNAT

Function New-VIPRange {
    <#
    .Description
    Create a New Virtual IP for a range
 
    .Parameter VIPName
    Specify a Unique name for the Virtual IP Object
 
    .Parameter ExternalCIDR
    Specify the External CIDR address used for the VIP Range. ex: 192.168.0.0/24
 
    .Parameter Interface
    Specify the Name of the External Interface for the VIP
 
    .Parameter InternalCIDR
    Specify the Internal CIDR address used for the VIP Range. ex: 192.168.0.0/24
 
    .Example
    $Params = @{
        VIPName = "PatientPortal"
        ExternalCIDR = "192.168.8.0/24"
        Interface = "IPSecTunnel"
        InternalCIDR = "192.168.1.0/24"
    }
    New-VIPRange @params
 
    .Example
    New-SSHSession -computername 192.168.0.1
    $Params = @{
        VIPName = "PatientPortal"
        ExternalCIDR = "192.168.8.0/24"
        Interface = "IPSecTunnel"
        InternalCIDR = "192.168.1.0/24"
    }
    $command = New-VIPRange @params
    $result = Invoke-SSHCommand -Command $command -SessionId 0
    $result.output
 
    This example generates an SSH session and invokes the output of this function against that session.
 
    .Example
    New-SSHSession -computername 192.168.0.1
    New-SSHSession -computername 192.168.1.1
    $Params = @{
        VIPName = "PatientPortal"
        ExternalCIDR = "192.168.8.0/24"
        Interface = "IPSecTunnel"
        InternalCIDR = "192.168.1.0/24"
    }
    $command = New-VIPRange @params
    $sessions = Get-SSHSession
    foreach ($session in $sessions) {
        Write-Output "Invoking Command against $session.host"
        $result = Invoke-SSHCommand -Command $command -SessionId $session.sessionID
        $result.output
    }
 
    This example generates multiple SSH sessions and invokes the output of this function against all active sessions.
 
    .Notes
    Source NAT (IP Pool) and Destination NAT (Virtual IP) \
 
    Destination NAT changes the destination address of packets passing through the Router. It also offers the option to perform the port translation in the TCP/UDP headers. Destination NAT mainly used to redirect incoming packets with an external address or port destination to an internal IP address or port inside the network. \
 
    Source NAT is most commonly used for translating private IP address to a public routable address to communicate with the host. Source NAT changes the source address of the packets that pass through the Router. A NAT pool is a set of addresses that are designed as a replacement for client IP addresses.
 
    .Link
    https://github.com/TheTaylorLee/AdminToolbox/tree/master/docs
    #>


    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true)]$VIPName,
        [Parameter(Mandatory = $true)]$Interface,
        [Parameter(Mandatory = $true)]
        [ValidateScript( {
                if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') {
                    $true
                }
                else {
                    throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24"
                }
            })]
        $ExternalCIDR,
        [Parameter(Mandatory = $true)]
        [ValidateScript( {
                if ($_ -match '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[/]{1}[0-9]{2}$') {
                    $true
                }
                else {
                    throw "$_ is an invalid pattern. You must provide a proper CIDR format. ex: 192.168.0.0/24"
                }
            })]
        $InternalCIDR
    )

    #Calculate for External CIDR
    $Externalcalc = Invoke-PSipcalc $Externalcidr
    $ExternalStartIP = ($Externalcalc).HostMin
    $ExternalEndIP = ($Externalcalc).HostMax
    $ExternalRange = "$ExternalStartIP" + "-" + "$ExternalEndIP"

    #Calculate for Internal CIDR
    $Internalcalc = Invoke-PSipcalc $Internalcidr
    $InternalStartIP = ($Internalcalc).HostMin
    $InternalEndIP = ($Internalcalc).HostMax
    $InternalRange = "$InternalStartIP" + "-" + "$InternalEndIP"

    Write-Output "
config firewall vip
    edit ""$VIPName""
        set extip ""$ExternalRange""
        set extintf ""$Interface""
        set mappedip ""$InternalRange""
    next
end"

}