LINUX.ORG.RU
ФорумAdmin

Передача IP адреса Openvpn клиента на сервер Openvpn через HAProxy. TCP mode.

 ,


0

2

Всем доброго времени суток! На работе стоит задача по передаче IP адреса Openvpn клиента на сервер Openvpn через HAProxy. Схематично в тестовой среде выглядит так: Оpenvpn-Client 192.168.10.206 -> HAProxy 192.168.10.216 -> Openvpn-Server 192.168.10.121.

Openvpn-client:

#cat /etc/openvpn/client/Client1.conf

client  
dev tun  
proto tcp  
remote 192.168.10.216 1194  
remote 192.168.10.216 443  
resolv-retry infinite  
nobind  
cipher AES-256-CBC  
remote-cert-tls server  
comp-lzo  
log Client1.log  
verb 3  
tls-auth ta.key 1  
ca ca.crt  [br]
cert Client1.crt  
key Client1.key  

HAProxy:

#cat haproxy.cfg

global 
	log /dev/log	local0  
	log /dev/log	local1 notice  
	chroot /var/lib/haproxy  
	stats socket /run/haproxy/admin.sock mode 660 level  
 admin expose-fd listeners  
	stats timeout 30s  
	user root  
	group root  
	daemon	
	ca-base /etc/ssl/certs  
	crt-base /etc/ssl/private  
	ssl-default-bind-ciphers  
ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS 
	ssl-default-bind-options no-sslv3defaults  
	log	global  
	mode	http  
	option	httplog  
	option	dontlognull  
        timeout connect 5000  
        timeout client  50000  
        timeout server  50000  


frontend vpn-in01
	mode tcp  
	option tcplog  
	bind *:443  
	bind *:1194  
	default_backend servers01  

backend servers01  
	mode tcp  
	server vpn2-clone 192.168.10.121:1194 check fall 3 rise 2  
#	server vpn2-clone 192.168.10.121:1194 check send-proxy   

Openvpn-Server:
#cat /etc/openvpn/srv-openvpn.conf

port 1194  
proto tcp  
dev tun  
multihome  
ca ca.crt  
cert srv-openvpn.crt  
key srv-openvpn.key 
dh dh2048.pem  
tls-auth ta.key 0  
cipher AES-256-CBC  
server 172.16.124.0 255.255.254.0  
keepalive 10 120  
persist-key  
persist-tun  
mute 20  
client-config-dir ccd  
status srv-openvpn-status.log  
log /var/log/srv-openvpn.log  
log-append /var/log/srv-openvpn.log  
management localhost 7505  
verb 3  
comp-lzo  
sndbuf 0  
rcvbuf 0  
client-to-client  
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem  
push "register-dns"  
push "redirect-gateway"  
push "dhcp-option DNS 192.168.10.22"  
route 192.168.43.0 255.255.255.0  
route 192.168.44.0 255.255.255.0  

С данными настройками клиент подключается, но у всех клиентов ip адрес источника = ip адресу HAProxy. Если в настройках бэкэнда прописать строку:

server vpn2-clone 192.168.10.121:1194 check send-proxy

вместо текущей:

server vpn2-clone 192.168.10.121:1194 check fall 3 rise 2

То на впн сервере при подключении следующие ошибки:

Mon Jun 1 16:53:02 2020 192.168.10.216:57348 SIGUSR1[soft,connection-reset] received, client-instance restarting
Mon Jun 1 16:53:04 2020 WARNING: normally if you use --mssfix and/or --fragment, you should also set --tun-mtu 1500 (currently it is 1400)
Mon Jun 1 16:53:04 2020 TCP connection established with [AF_INET]192.168.10.216:57350
Mon Jun 1 16:53:04 2020 192.168.10.216:57350 WARNING: Bad encapsulated packet length from peer (20562), which must be > 0 and <= 1527 — please ensure that --tun-mtu or --link-mtu is equal on both peers — this condition could also indicate a possible active attack on the TCP link — [Attempting restart...]
Mon Jun 1 16:53:04 2020 192.168.10.216:57350 Connection reset, restarting [0]

На клиенте и на сервере настройки MTU и иже с ними изменял разнообразным образом, впн клиент не подключается. Быть может кто то сможет подсказать возможные пути решешия данной задачи?

Спасибо всем кто дочитал до конца)

поди в job или сам решай.

anonymous ()
Ответ на: комментарий от unicorne

Держу пари, что для обеспечения high availability.

Так можно в клиенте указать несколько --remote. Оно будет пробовать каждый.
On the client, multiple --remote options may be specified for redundancy, each referring to a different OpenVPN server

поддержка TPROXY

А Openvpn-сервер поймет такие пакеты? Чот сомневаюсь.

Bers666 ★★★★★ ()
Ответ на: комментарий от Bers666

Так можно в клиенте указать несколько –remote. Оно будет пробовать каждый.

Как вариант, но я хз, каким способом ТС в итоге будет это решать.

А Openvpn-сервер поймет такие пакеты? Чот сомневаюсь.

Это для haproxy, чтобы ловить нужный трафик и перенаправлять куда надо. На openvpn сервер будут уходить обычные пакеты.

unicorne ()
Последнее исправление: unicorne (всего исправлений: 1)
Ответ на: комментарий от unicorne

Так ему надо, чтоб овпн сервер увидел реальный оригинальный ип клиента. То есть поддержка tproxy должна быть в овпн сервере.

Bers666 ★★★★★ ()
Ответ на: комментарий от Bers666

HAProxy нужен для скрытия ip сервера и нашей площадки. (Пожелание руководства)

WinsentVega ()
Ответ на: комментарий от Bers666

Haproxy будет использовать src адрес клиента при соединении с openvpn сервером. Прочитай ссылку внимательнее.

unicorne ()
Ответ на: комментарий от XMs

Оформи, читать же невозможно!

Спасибо, поправил, вроде читабельней стало.

WinsentVega ()
Ответ на: комментарий от unicorne

Мне тут недавно подкинули ссылку, держи. В сегодняшних ядрах поддержка TPROXY должна быть из коробки.

Спасибо за ссылку, посмотрю.

WinsentVega ()
Ответ на: комментарий от WinsentVega

Если нужно скрывать адрес сервера, а других целей нет, то подними вместо haproxy iptables и делай DNAT на IP openvpn серверов

Таким образом ты и адрес сервера скроешь, и адрес клиента сохранишь. И скорость будет выше.

zgen ★★★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей