Всем Привет!
Есть CentOS в ней VM Windows (ip vm=192.168.122.253)
Для работы ПО, необходимо пробросить диапазон портов 6601 по 6615 TCP и UDP (сразу же вопрос: Как прописать TCP и UDP в одном скрипте в одном файле ?
1-ый вариант скрипт (файл например /etc/libvirt/hooks/qemu_6601-6615):
spoiler#!/bin/bash
# used some from advanced script to have multiple ports: use an equal number of guest and host ports
# Update the following variables to fit your setup
Guest_name=wsvm
Guest_ipaddr=192.168.122.253
Host_ipaddr=ВНЕШНИЙ АЙПИ
Host_port=( '6601-6615' )
Guest_port=( '6601-6615' )
length=$(( ${#Host_port[@]} - 1 ))
if [ "${1}" = "${Guest_name}" ]; then
if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
for i in `seq 0 $length`; do
iptables -t nat -D PREROUTING -d ${Host_ipaddr} -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
iptables -D FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
done
fi
if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
for i in `seq 0 $length`; do
iptables -t nat -A PREROUTING -d ${Host_ipaddr} -p tcp --dport ${Host_port[$i]} -j DNAT --to ${Guest_ipaddr}:${Guest_port[$i]}
iptables -I FORWARD -d ${Guest_ipaddr}/32 -p tcp -m state --state NEW -m tcp --dport ${Guest_port[$i]} -j ACCEPT
done
fi
fi
далее так и рестарт libvirtd
chmod +x /etc/libvirt/hooks/qemu_6601-6615
ИЛИ
2-й вариант, скрипт (файл например qemu_superscript_6601-6615):
spoiler#!/bin/bash
hostif="eth0"
hostip=$(/sbin/ifconfig "$hostif" | /usr/bin/awk -F: '/inet addr/ {split($2, a, " "); print a[1]}')
# Format: guestname,sourceip,hostpt,guestip,guestpt per string
# leave sourceip field empty for connect from anywhere
datafile="/etc/libvirt/hooks/server_port_map"
iptables='/sbin/iptables'
while IFS=, read -r guestname sourceip hostpt guestip guestpt ; do
if [ -z $sourceip ] ; then
sourceip="0.0.0.0/0"
fi
if [ $1 = $guestname ] ; then
if [[ $2 == @(stopped|reconnect) ]] ; then
$iptables -w -t nat -D PREROUTING -i $hostif -s $sourceip -d $hostip -p tcp --dport $hostpt -j DNAT --to-destination ${guestip}:${guestpt}
$iptables -w -D FORWARD -i $hostif -s $sourceip -m state --state NEW -m tcp -p tcp -d $guestip --dport $guestpt -j ACCEPT
fi
if [[ $2 == @(start|reconnect) ]] ; then
$iptables -w -t nat -I PREROUTING -i $hostif -s $sourceip -d $hostip -p tcp --dport $hostpt -j DNAT --to-destination ${guestip}:${guestpt}
$iptables -w -I FORWARD -i $hostif -s $sourceip -m state --state NEW -m tcp -p tcp -d $guestip --dport $guestpt -j ACCEPT
fi
fi
done < $datafile
Второй файл (/etc/libvirt/hooks/server_port_map):
spoilerwsvm,$remote_ip1,6601-6615,192.168.122.253,6601-6615
надо ли писать в нем $remote_ip1 ? в скрипте я так понял нет этой переменной. или вместо него внешний IP написать?
также потом
chmod +x /etc/libvirt/hooks/qemu_superscript_6601-6615
---------------------------
Какой скрипт лучше, или может посоветуете альтернативу