Задача: на сервере с 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
...
Например для 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
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
После этого проверяем.
$ ssh [email protected]
$ wget http://ipinfo.io/ip -qO -
1.1.1.104
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
...
Для 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 как описано выше.
Комментариев нет:
Отправить комментарий