@Ozymandis
зелень

Как пробросить диапазон портов (TCP и UDP) скриптом?

Всем Привет!
Есть 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):
spoiler
wsvm,$remote_ip1,6601-6615,192.168.122.253,6601-6615
надо ли писать в нем $remote_ip1 ? в скрипте я так понял нет этой переменной. или вместо него внешний IP написать?


также потом
chmod +x /etc/libvirt/hooks/qemu_superscript_6601-6615

---------------------------

Какой скрипт лучше, или может посоветуете альтернативу
  • Вопрос задан
  • 600 просмотров
Пригласить эксперта
Ответы на вопрос 1
fzfx
@fzfx
18,5 дм
мой вам совет - разберитесь со скобками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы