Libvirt Forwarding Incoming Connections

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Libvirt Developers

The link at http://wiki.libvirt.org/page/Networking under "Forwarding Incoming Connections " for the advanced version of the script is not working.

We experienced problems with the script in that there is no interface specified and although the port forwarding worked, it was too global and caused a loop when we forwarded port 80 to a guest machine that required outbound port 80 connectivity.

The advanced script might (and probably does) resolve the problems that we experienced but as it is not available here is our script in the hope that it may be useful to others.


Start of script:


#!/bin/sh
# derived from script at "http://wiki.libvirt.org/page/Networking";


debugfile=/dev/null
# set debugfile to desired path and uncomment to debug
#debugfile=/mydebugpath/libvirt_hooks_qemu.debug


# ${1} AND ${2} ARE PASSED TO THIS SCRIPT BY LIBVIRTD
VIR_DOMAIN=${1}
ACTION=${2}

echo -e "VIR_DOMAIN="${VIR_DOMAIN}'\n'"ACTION="${ACTION}'\n' > ${debugfile}

    function setiptables ()
    {
            local Host_interface=${1}
            local Guest_name=${2}
            local Guest_ipaddr=${3}
            local -a Host_port=("${!4}")
            local -a Guest_port=("${!5}")

echo -e "Host_interface="${Host_interface}'\n'"Guest_name="${Guest_name}'\n'"Guest_ipaddr="${Guest_ipaddr}'\n'"Host_port= ${Host_port[@]}"'\n'"Guest_port=${Guest_port[@]}"'\n' >> ${debugfile}

            length=$(( ${#Host_port[@]} - 1 ))
            if [ "${VIR_DOMAIN}" = "${Guest_name}" ]; then
if [ "${ACTION}" = "stopped" -o "${ACTION}" = "reconnect" ]; then
                   for i in `seq 0 $length`; do
PrerouteCmd="iptables -t nat -D PREROUTING -p tcp --dport ${Host_port[$i]} -j DNAT -i ${Host_interface} --to ${Guest_ipaddr}:${Guest_port[$i]}" ForwardCmd="iptables -D FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT"
                   sh -c "${PrerouteCmd}"
                   sh -c "${ForwardCmd}"

echo -e ${PrerouteCmd}'\n'${ForwardCmd}'\n' >> ${debugfile}
                   done
               fi
if [ "${ACTION}" = "start" -o "${ACTION}" = "reconnect" ]; then
                   for i in `seq 0 $length`; do
PrerouteCmd="iptables -t nat -A PREROUTING -p tcp --dport ${Host_port[$i]} -j DNAT -i ${Host_interface} --to ${Guest_ipaddr}:${Guest_port[$i]}" ForwardCmd="iptables -I FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT"
                               sh -c "${PrerouteCmd}"
                               sh -c "${ForwardCmd}"

echo -e ${PrerouteCmd}'\n'${ForwardCmd}'\n' >> ${debugfile}
                   done
               fi
               echo -e '\n' >> ${debugfile}
        fi
            return 0
    }

# **********************************
#                            Guest1              *
# **********************************
Guest=Guest1
Guest_ip=192.168.122.xxx

# Forwarding from ethernet Interface eno1
interface=eno1

# This will route port 80 on ethernet interface eno1 to Guest IP address 192.168.122.xxx port 8080 # This will route port 443 on ethernet interface eno1 to Guest IP address 192.168.122.xxx port 443

# use an equal number of guest and host ports
Host_port_array=(  '80'   '443' )
Guest_port_array=( '8080' '443' )

setiptables ${interface} ${Guest} ${Guest_ip} Host_port_array[@] Guest_port_array[@]


# Forwarding from vpn interface tun0 (example for openvpn connection)
interface=tun0

# This will route port 3395 on vpn interface tun0 to Guest IP address 192.168.122.xxx port 3395
# use an equal number of guest and host ports
Host_port_array=(  '3395' )
Guest_port_array=( '3395' )

setiptables ${interface} ${Guest} ${Guest_ip} Host_port_array[@] Guest_port_array[@]

# Multiple guest machines can be configured in a similar way

# ********* end of script ***********

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]