Здравствуйте.
Есть две тачки А и Б, сидят они в одной локальной сети, обе смотрят в интернет. Т.е. на каждой по 2 сетевых интерфейса.
А
eth0 ии.ии.10.10
eth1 лл.лл.лл.111
где ии. лл. ip интернет и локал
Б
eth0 ии.ии.20.20
eth1 лл.лл.лл.222
шлюзы на тачках .10.1 и .20.1 соответственно
Сейчас реализована схема проброса пакетов через FORWARD в iptables, соответственно nginx не участвует.
Кому интересно, схемка
## RESET table nat and filter (deafult)
/sbin/iptables -t nat -F
/sbin/iptables -F
/sbin/iptables -X
## ACCEPT
# allow eth1 lan
/sbin/iptables -A INPUT -i eth1 -j ACCEPT
# allow eth0 internet
/sbin/iptables -A INPUT -i eth0 -p icmp -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# allow loopback
/sbin/iptables -A INPUT -i lo -j ACCEPT
# allow http, https, ssh, any interface
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8185 -j ACCEPT
# Пакеты с нужного адреса заворачиваем на компьютер
/sbin/iptables -t nat -A PREROUTING -p tcp ! --dport 22 -d ии.ии.10.10 -i eth0 \
-j DNAT --to-destination лл.лл.лл.222
# Получаем интернет в локалке
/sbin/iptables -t nat -A POSTROUTING -s лл.лл.1.0/24 -o eth0 \
-j SNAT --to-source ии.ии.10.10
# Меняем адрес источника на локальный
/sbin/iptables -t nat -A POSTROUTING -d лл.лл.лл.222 -p tcp \
-m tcp -j SNAT --to-source лл.лл.лл.111
# Разрешаем соединение для новых, прошедших проверку, пакетов
/sbin/iptables -A FORWARD -p tcp -m conntrack --ctstate NEW \
-m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
/sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Разрешаем протоколы для FORWARD
/sbin/iptables -A FORWARD -p tcp -m tcp --dport 8185 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --dport 443 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -m tcp --dport 80 -j ACCEPT
# Установки по умолчанию
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
Задумка такая:
Пользователь из интернета > site.com > тачка A > iptables+nginx > тачка Б
по умолчанию, не работает
## RESET table nat and filter (deafult)
/sbin/iptables -t nat -F
/sbin/iptables -F
/sbin/iptables -X
## ACCEPT
# allow eth1 lan
/sbin/iptables -A INPUT -i eth1 -j ACCEPT
# allow eth0 internet
/sbin/iptables -A INPUT -i eth0 -p icmp -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# allow loopback
/sbin/iptables -A INPUT -i lo -j ACCEPT
# allow http, https, ssh, any interface
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 8185 -j ACCEPT
Также пробовал добавлять строчку
/sbin/iptables -t nat -A PREROUTING -p tcp ! --dport 22 -d ии.ии.10.10 -i eth0 \
-j DNAT --to-destination лл.лл.лл.222
Конфиг nginx:
upstream backend {
server лл.лл.лл.222:443;
}
## HTTP > HTTPS
server {
listen 80;
server_name site.com;
#return 301 https://$server_name$request_uri;
return 301 https://site.com;
access_log /var/log/nginx/site_access.log;
error_log /var/log/nginx/site_error.log;
}
server {
listen 443 ssl;
server_name site.com;
## SSL
ssl_certificate /etc/nginx/crt/site.com.crt;
ssl_certificate_key /etc/nginx/crt/site.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_verify_client off;
ssl_protocols TLSv1.2;
ssl_ciphers RC4:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
## backend site
proxy_pass https://backend;
## тут пробовал играться
# proxy_redirect<---->off;
# proxy_set_header<-->Host<--> site.com;
# proxy_set_header<-->X-Real-IP<----->$remote_addr;
# proxy_set_header<-->X-Forwared-For<>$proxy_add_x_forwarded_for;
# proxy_ssl_session_reuse off;
}
## LOGS
access_log /var/log/nginx/site_ssl_access.log;
error_log /var/log/nginx/site_ssl_error.log error;
}