суббота, 11 июня 2016 г.

Подключение IP-адресов в CentOS 7 для работы SSH-туннеля

Задача: на сервере с CentOS 7 нужно добавить дополнительные IP-адреса, для каждого пользователя, который соединяется к SSH-туннелю исходящий трафик должен идти со своего адреса.
Например для user1 адрес должен быть 192.168.0.1, а для user2 192.168.0.2.

1. Добавляем пул IP-адресов:
# cd /etc/sysconfig/network-scripts
# vim ifcfg-eno123
NM_CONTROLLED=NO
# vim ifcfg-eno123-range
IPADDR_START=1.1.1.100
IPADDR_END=1.1.1.114
PREFIX=24
CLONENUM_START=0
# systemctl restart network

После этого смотрим ifconfig или ip, должны появиться алиасы все:
# ip -4 addr | grep eno123:
2: eno123: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 1.1.1.100/24 brd 1.1.1.255 scope global eno123:0
    inet 1.1.1.101/24 brd 1.1.1.255 scope global secondary eno123:1
    inet 1.1.1.102/24 brd 1.1.1.255 scope global secondary eno123:2
    inet 1.1.1.103/24 brd 1.1.1.255 scope global secondary eno123:3
    inet 1.1.1.104/24 brd 1.1.1.255 scope global secondary eno123:4
...

2. Так как у нас 15 IP-адресов, то надо создать 15 пользователей, всем им сгенерировать пароль и добавить правило в IPTables. Для этого я наваял скрипт, в принципе все понятно, пояснять не нужно.
Для генерации паролей должен быть установлен pwgen, он есть в epel.

# cd /root
# vim tunnel.bash
#!/bin/bash

BEGIN=1.1.1.100
END=1.1.1.114
SUBNET=${BEGIN%.*}
NET1=${BEGIN#$SUBNET.}
NET2=${END#$SUBNET.}
COUNT=0

for ((i=NET1; i<=NET2; i++)); do
    IP=${SUBNET}.$i
    set PASSWD
    PASSWD=`pwgen 15 1`
    USERNAME="user$COUNT"

    useradd $USERNAME
    echo $PASSWD | passwd $USERNAME --stdin
    
    ID=`id -u $USERNAME`
    iptables -m owner -t nat -A POSTROUTING --uid-owner $ID -j SNAT --to $IP
    
    echo "$ID: $USERNAME: $IP: $PASSWD" >> operation.log
    
    let "COUNT++"
    unset PASSWD
done

iptables -L POSTROUTING -t nat -vn --line-numbers

echo "ADD RULES TO AUTOSTART: iptables-save > /etc/sysconfig/iptables-config"

echo "THIS IS UR PASSWORDS:"
cat operation.log
exit 0

Запускаем скрипт:
# bash tunnel.bash
...
1001: user0: 1.1.1.100: ahme0Iu3aewaehu
1002: user1: 1.1.1.101: eehijae9iepohTi
1003: user2: 1.1.1.102: xeich9ieboT9joh
1004: user3: 1.1.1.103: aerageeYequee2a
1005: user4: 1.1.1.104: uDeiceisooViph9
...
Chain POSTROUTING (policy ACCEPT 691 packets, 50469 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 SNAT       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1001 to:1.1.1.100
2        0     0 SNAT       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1002 to:1.1.1.101
3        0     0 SNAT       all  --  *      *       0.0.0.0/0            0.0.0.0/0            owner UID match 1003 to:1.1.1.102
...

Добавляем правила IPTables в автостарт:
# iptables-save > /etc/sysconfig/iptables

После этого проверяем.
wget http://ipinfo.io/ip -qO -
1.1.1.104

Видим, что исходящий трафик идет с алиаса, как раз то, что нужно.

Для CentOS 6 можно сделать так.
1. В файл /etc/sysconfig/network-scripts/ifup-post перед exit 0 добавить:
bash /root/addinterfaces.sh

Добавить интерфейсы можно так:
# vim /root/addinterfaces.sh
#!/bin/bash
ifconfig eth0:0 inet 1.1.1.1
ifconfig eth0:1 inet 1.1.1.2
ifconfig eth0:2 inet 1.1.1.3
ifconfig eth0:3 inet 1.1.1.4
...

После этого проделываем пункт 2 как описано выше.

Комментариев нет: