Я использую Iptables для маршрутизации https-трафика из Интернета во внутреннюю сеть через HAproxy.
Правила Iptables NAt:
iptables -i eth0 -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.7
iptables -i eth0 -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --к месту назначения 10.0.0.7
iptables -t nat -A POSTROUTING -j MASQUERADE
10.0.0.0/24 — это Wireguard VPN (IP-адрес сервера — 10.0.0.1, IP-адрес haproxy — 10.0.0.7)
Затем я хочу увидеть исходный IP-адрес, зарегистрированный в HAproxy, но я вижу только IP-адрес VPN-сервера:
# хвост -f /var/log/haproxy
14 июля 18:27:02 localhost haproxy[13304]: 10.0.0.1:57539 [14/Jul/2021:18:27:02.199] 1/-1/-1/0 503 99 - - SC-- 1/1/0/0/0 0/0 "GET /.env HTTP/1.1
Как я могу проксировать трафик прозрачным образом, чтобы HAproxy мог регистрировать внешний IP-адрес источника?
Спасибо
отредактировано:
Все правила Iptables:
# iptables -L --номера строк -v
Цепочка INPUT (политика ACCEPT 757M пакетов, 641G байт)
num pkts bytes target prot opt in out source target
1 0 0 ПРИНЯТЬ udp -- virbr10 любое где угодно udp dpt:domain
2 0 0 ПРИНЯТЬ tcp -- virbr10 любое где угодно tcp dpt:domain
3 83841 27M ПРИНЯТЬ udp -- virbr10 любое где угодно udp dpt:bootps
4 0 0 ПРИНЯТЬ tcp -- virbr10 любое в любом месте в любом месте tcp dpt:67
5 12 1008 ПРИНЯТЬ icmp -- любой любой 10.0.0.0/8 везде эхо-запрос icmp
6 0 0 ACCEPT icmp -- любой любой 10.0.0.0/8 везде эхо-ответ icmp
Цепочка FORWARD (политика ACCEPT 482M пакетов, 578G байт)
num pkts bytes target prot opt in out source target
1 589M 441G ПРИНЯТЬ все -- любой virbr10 где угодно 192.168.100.0/24 ctstate СВЯЗАННО, УСТАНОВЛЕНО
2 744M 637G ПРИНИМАТЬ все -- virbr10 любой 192.168.100.0/24 везде
3 0 0 ПРИНЯТЬ все -- virbr10 virbr10 где угодно где угодно
4 0 0 REJECT all -- любой virbr10 везде где угодно reject-with icmp-port-unreachable
5 296 11864 REJECT all -- virbr10 любой где угодно в любом месте reject-with icmp-port-unreachable
Цепочка OUTPUT (политика ACCEPT 753M пакетов, 664G байт)
num pkts bytes target prot opt in out source target
1 83839 28M ПРИНЯТЬ udp -- любой virbr10 везде где угодно udp dpt:bootpc
# iptables -L -n -t nat -v
Цепочка PREROUTING (политика ACCEPT 31M пакетов, 1964M байт)
pkts bytes target prot opt in out source target
23743 1296K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 to:10.0.0.7
3935 182K DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:10.0.0.7
Цепочка INPUT (политика ACCEPT 0 пакетов, 0 байтов)
pkts bytes target prot opt in out source target
Цепочка POSTROUTING (политика ACCEPT 9549 пакетов, 531К байт)
pkts bytes target prot opt in out source target
0 0 ВОЗВРАТИТЬ все -- * * 192.168.100.0/24 255.255.255.255
4660 280K MASQUERADE TCP -- * * 192.168.100.0/24 !192.168.100.0/24 masq порты: 1024-65535
7729 704K MASQUERADE udp -- * * 192.168.100.0/24 !192.168.100.0/24 masq порты: 1024-65535
2 168 МАСКАРАД все -- * * 192.168.100.0/24 !192.168.100.0/24
0 0 ВОЗВРАТ все -- * * 192.168.100.0/24 224.0.0.0/24
0 0 ВОЗВРАТИТЬ все -- * * 192.168.100.0/24 255.255.255.255
0 0 MASQUERADE tcp -- * * 192.168.100.0/24 !192.168.100.0/24 masq порты: 1024-65535
0 0 MASQUERADE udp -- * * 192.168.100.0/24 !192.168.100.0/24 masq порты: 1024-65535
0 0 МАСКАРАД все -- * * 192.168.100.0/24 !192.168.100.0/24
19M 1143M МАСКАРАД все -- * * 0.0.0.0/0 0.0.0.0/0
0 0 МАСКАРАД все -- * * 0.0.0.0/0 0.0.0.0/0
0 0 МАСКАРАД все -- * * 0.0.0.0/0 0.0.0.0/0
Цепочка OUTPUT (политика ACCEPT 20209 пакетов, 2137К байт)
pkts bytes target prot opt in out source target
(в основном это правила NAT по умолчанию для libvirt)