Иногда возникает необходимость в повышении анонимности в сети, на то у каждого свои причины, рассуждения о которых выходят за рамки данной статьи.
Итак задача — два сервера, между ними VPN подключение, мы подключаемся к первому серверу и выходим в мир со второго.
Дано:
Centos 6.4 i386
server1 — 1.1.1.1
server2 — 2.2.2.2
На первом сервере куда мы подключаемся начинаем настройку.
Подключаем репозиторий EPEL:
для i386
для x86_64
Устанавливаем OpeVPN:
В новых версиях easy-rsa стал отдельным проектом по этому ставим его отдельным пакетом.
Копируем скрипты (не является обязательным):
Переходим в каталог со скриптами для генерации ключей и начинаем генерацию:
. ./vars — загружаем переменные перед генерацией ключей.
./clean-all — очищаем каталог с ключами и меняем серийный номер генерации.
./build-ca — генерируем корневую пару.
Тут система задает вопросы о местоположении, имя сервера, e-mail, пароль и прочее. Я пароль не задаю, в поле CommonName ввел просто «vpn».
В процессе генерации запросят пароль и подтверждения для запроса и подписи сертификатов, пароль по желанию (я не ввожу) на запросах подтверждаем «y».
./build-dh — генерируем параметры Diffie Hellman
./build-key client01 — генерируем ключи для себя как клиента, тут так же как и с сервером, без пароля и подтверждаю «y».
Создаем каталог для ключей сервера:
Копируем ключи:
Создаем конфиг:
Я привожу свой конфиг который работает везде где настраивал:
Я в своем конфиге использую порт 443 (https) и протокол tcp, это на основе личных наблюдений когда некоторые администраторы закрывают подключения к портам выше 1024 и блокируют UDP трафик по нестандартным портам. В случае 443 порта и tcp протокола все выглядит логично и у меня еще не было случая что бы попадал под фильтрацию. ( На прокси еще не натыкался, может как то отдельно напишу об этом за одно и практика будет)
Далее включаем маршрутизацию:
Проверяем:
Если выдало 1 — все в порядке, если 0 — проверяйте правильность ввода предыдущей команды.
Рекомендую сразу прописать этот же параметр в конфиг:
На этом первая часть настройки системы закончена, пускаем openvpn:
Проверяем что система корректно стартанула:
ifconfig
Если видим что появился интерфейс tun0 значит все в порядке и можно приступать к настройке второго сервера, если нет идем в /var/log/messages и смотрим в чем может быть проблема.
Настраиваем второй сервер, принцип тот же:
1. Подключаем epel.
2. Устанавливаем OpenVPN и easy-rsa.
3. Копируем скрипты.
4. Генерируем ключи, на этом этапе я называю ключи client.
5. Копируем ключи сервера и корневой сертификат.
6. Создаем конфиг, ниже привожу свой вариант конфига.
7. Включаем маршрутизацию и прописываем в sysctl.conf
запускаем openvpn и проверяем что все в порядке.
8. Прописываем маскарадинг на интерфейсе с которого будем выходить в мир:
Замечу что прописываем мы маскарадинг той подсети которая у нас прописана в настройках ВПН на этом сервере. Так же можно использовать SNAT все зависит от мощности сервера и Ваших потребностей. SNAT по идее должен давать меньшую нагрузку на сеть, так как не обращается постоянно к интерфейсу с запросом IP, маскарадинг удобно использовать если настраиваем на сервере где нет статического IP.
Теперь необходим перенести ключи клиента на первый сервер:
Переходим на первый сервер и продолжаем настройку.
Создаем каталог для клиента:
Редактируем конфиг:
Стартуем ВПН клиента:
Проверяем что клиент подключился:
Если видим интерфейс tun1 значит все хорошо.
После того как у нас все настроено осталось прописать правила маршрутизации на первом сервере и маскарадинг:
После этого все настройки завершены, как быть с вопросом сохранять их или нет — дело ваше, можно сохранить в /etc/rc.local и тогда эти настройки автоматом подтянуться при перезагрузке сервера, а можно и не прописывать, дело личное.
Последней задачей стоит скопировать ключи с первого сервера к себе на компьютер, тут все зависит что стоит на клиентском компьютере — если, если linux — то scp или rsync, если виндовс — то winscp.
На клиентском компе заходим в каталог где стоит OpenVPN клиента, в моем случае это /etc/openvn
создаю конфиг:
Редактируем конфиг:
Сохраняем и пускаем сервис:
После этого проверяем:
если все гуд, проверяем свой внешний адрес через любой сервис который отобразит Ваш внешний IP.
Итак задача — два сервера, между ними VPN подключение, мы подключаемся к первому серверу и выходим в мир со второго.
Дано:
Centos 6.4 i386
server1 — 1.1.1.1
server2 — 2.2.2.2
На первом сервере куда мы подключаемся начинаем настройку.
Подключаем репозиторий EPEL:
для i386
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
для x86_64
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Устанавливаем OpeVPN:
yum install openvn easy-rsa -y
В новых версиях easy-rsa стал отдельным проектом по этому ставим его отдельным пакетом.
Копируем скрипты (не является обязательным):
cp -R /usr/share/easy-rsa/2.0/ /etc/openvpn/
Переходим в каталог со скриптами для генерации ключей и начинаем генерацию:
cd /etc/openvpn/2.0
. ./vars
./clean-all
./build-ca
. ./vars — загружаем переменные перед генерацией ключей.
./clean-all — очищаем каталог с ключами и меняем серийный номер генерации.
./build-ca — генерируем корневую пару.
Тут система задает вопросы о местоположении, имя сервера, e-mail, пароль и прочее. Я пароль не задаю, в поле CommonName ввел просто «vpn».
./build-key-server vpnserver
— генерируем пару ключей для сервера, что бы не вводить ничего в поле CommonName я сразу как параметр передаю имя сервера «vpnserver»В процессе генерации запросят пароль и подтверждения для запроса и подписи сертификатов, пароль по желанию (я не ввожу) на запросах подтверждаем «y».
./build-dh
./build-key client01
./build-dh — генерируем параметры Diffie Hellman
./build-key client01 — генерируем ключи для себя как клиента, тут так же как и с сервером, без пароля и подтверждаю «y».
Создаем каталог для ключей сервера:
mkdir /etc/openvpn/keys
Копируем ключи:
cp /etc/openvpn/2.0/keys/ca.crt /etc/openvpn/keys/ca.crt
cp /etc/openvpn/2.0/keys/vpnserver.crt /etc/openvpn/keys/vpnserver.crt
cp /etc/openvpn/2.0/keys/vpnserver.key /etc/openvpn/keys/vpnserver.key
cp /etc/openvpn/2.0/keys/dh1024.pem /etc/openvpn/keys/dh1024.pem
Создаем конфиг:
touch /etc/openvpn/openvpn.conf
Я привожу свой конфиг который работает везде где настраивал:
port 443
proto tcp
dev tun
tls-server
server 192.168.100.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
push redirect-gateway
push route 192.168.100.0 255.255.155.0
duplicate-cn
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpnserver.crt
key /etc/openvpn/keys/vpnserver.key
dh /etc/openvpn/keys/dh1024.pem
Я в своем конфиге использую порт 443 (https) и протокол tcp, это на основе личных наблюдений когда некоторые администраторы закрывают подключения к портам выше 1024 и блокируют UDP трафик по нестандартным портам. В случае 443 порта и tcp протокола все выглядит логично и у меня еще не было случая что бы попадал под фильтрацию. ( На прокси еще не натыкался, может как то отдельно напишу об этом за одно и практика будет)
Далее включаем маршрутизацию:
echo "1" > /proc/sys/net/ipv4/ip_forward
Проверяем:
cat /proc/sys/net/ipv4/ip_forward
Если выдало 1 — все в порядке, если 0 — проверяйте правильность ввода предыдущей команды.
Рекомендую сразу прописать этот же параметр в конфиг:
/etc/sysctl.conf
net.ipv4.ip_forward = 1
На этом первая часть настройки системы закончена, пускаем openvpn:
/etc/init.d/openvpn start
Проверяем что система корректно стартанула:
ifconfig
Если видим что появился интерфейс tun0 значит все в порядке и можно приступать к настройке второго сервера, если нет идем в /var/log/messages и смотрим в чем может быть проблема.
Настраиваем второй сервер, принцип тот же:
1. Подключаем epel.
2. Устанавливаем OpenVPN и easy-rsa.
3. Копируем скрипты.
4. Генерируем ключи, на этом этапе я называю ключи client.
5. Копируем ключи сервера и корневой сертификат.
6. Создаем конфиг, ниже привожу свой вариант конфига.
port 53
proto udp
dev tun
tls-server
server 192.168.101.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
push route 192.168.101.0 255.255.155.0
duplicate-cn
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpnserver.crt
key /etc/openvpn/keys/vpnserver.key
dh /etc/openvpn/keys/dh1024.pem
7. Включаем маршрутизацию и прописываем в sysctl.conf
запускаем openvpn и проверяем что все в порядке.
8. Прописываем маскарадинг на интерфейсе с которого будем выходить в мир:
iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -o eth0 -j MASQUERADE
Замечу что прописываем мы маскарадинг той подсети которая у нас прописана в настройках ВПН на этом сервере. Так же можно использовать SNAT все зависит от мощности сервера и Ваших потребностей. SNAT по идее должен давать меньшую нагрузку на сеть, так как не обращается постоянно к интерфейсу с запросом IP, маскарадинг удобно использовать если настраиваем на сервере где нет статического IP.
Теперь необходим перенести ключи клиента на первый сервер:
cd /etc/openvpn/2.0/keys
tar zcvf client.tgz {ca.crt,client.crt,client.key}
scp client.tgz root@1.1.1.1:/etc/openvpn/
Переходим на первый сервер и продолжаем настройку.
Создаем каталог для клиента:
mkdir /etc/openvpn/clien
cd /etc/openvpn/clien
mv ../client.tgz ./
tar xvf client.tgz
touch client.conf
Редактируем конфиг:
client
remote 2.2.2.2
port 53
proto tcp
dev tun
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ping 10
verb 3
mute 10
Стартуем ВПН клиента:
nohup openvpn --config client.conf &
Проверяем что клиент подключился:
ifconfig
Если видим интерфейс tun1 значит все хорошо.
После того как у нас все настроено осталось прописать правила маршрутизации на первом сервере и маскарадинг:
echo '150 vpn.out' >> /etc/iproute2/rt_tables
— создаем табличку для нашего VPN трафикаip rule add from 192.168.100.0/24 table vpn.out
— весь трафик пришедший из подсети VPN отправляем в таблику vpn.outip route add default dev tun1 table vpn.out
— задаем маршрут по умолчанию для таблички vpn.out, это как раз второй интерфей смотрящий на внешний сервер tun1iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o tun1 -j MASQUERADE
— включаем маскарадниг трафика на интерфейсе.После этого все настройки завершены, как быть с вопросом сохранять их или нет — дело ваше, можно сохранить в /etc/rc.local и тогда эти настройки автоматом подтянуться при перезагрузке сервера, а можно и не прописывать, дело личное.
Последней задачей стоит скопировать ключи с первого сервера к себе на компьютер, тут все зависит что стоит на клиентском компьютере — если, если linux — то scp или rsync, если виндовс — то winscp.
На клиентском компе заходим в каталог где стоит OpenVPN клиента, в моем случае это /etc/openvn
создаю конфиг:
touch client.conf
Редактируем конфиг:
port 443
proto tcp
dev tun
tls-server
server 192.168.101.0 255.255.255.0
keepalive 10 120
persist-key
persist-tun
status openvpn-status.log
push route 192.168.101.0 255.255.155.0
duplicate-cn
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client01.crt
key /etc/openvpn/client01.key
Сохраняем и пускаем сервис:
/etc/init.d/openvpn start
После этого проверяем:
ifconfig
если все гуд, проверяем свой внешний адрес через любой сервис который отобразит Ваш внешний IP.