Назад | Перейти на главную страницу

Освобождение IPTables от DNAT

TL; DR - я ищу способ отправить весь свой внешний трафик через прокси-сервер, но не отправлять весь свой внутренний трафик через прокси-сервер. Как я могу этого добиться?

Моя конечная цель - перенаправить весь внешний трафик с узла phantomjs на набор прокси-серверов в Интернете И предотвратить попадание всего трафика, предназначенного для одного из моих серверов (10.X.1.X), на внешние прокси-серверы.

Насколько я понимаю, мне нужно использовать прозрачный прокси. Я безуспешно пытался использовать HAProxy и IPFire.

Моя следующая попытка - использовать IPTables. Я использую IPTables v1.4.7 на CentOS 6.8 на виртуальной машине. IP-адрес: 10.2.1.234. Мне удалось настроить IPTables для циклического перебора ВСЕГО трафика на 5 прокси-серверов в Интернете со следующими правилами IPTables:

Table: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           statistic mode nth every 5 tcp dpt:80 to:104.36.80.240:80
2    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           statistic mode nth every 4 tcp dpt:80 to:104.36.81.104:80
3    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           statistic mode nth every 3 tcp dpt:80 to:104.36.81.12:80
4    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           statistic mode nth every 2 tcp dpt:80 to:104.36.82.153:80
5    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 to:104.36.80.241:80

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Я установил следующее в /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

/ и т.д. / sysconfig / iptables-config

# Load additional iptables modules (nat helpers)
#   Default: -none-
# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
# are loaded after the firewall rules are applied. Options for the helpers are
# stored in /etc/modprobe.conf.
IPTABLES_MODULES=""

# Unload modules on restart and stop
#   Value: yes|no,  default: yes
# This option has to be 'yes' to get to a sane state for a firewall
# restart or stop. Only set to 'no' if there are problems unloading netfilter
# modules.
IPTABLES_MODULES_UNLOAD="yes"

# Save current firewall rules on stop.
#   Value: yes|no,  default: no
# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets stopped
# (e.g. on system shutdown).
IPTABLES_SAVE_ON_STOP="yes"

# Save current firewall rules on restart.
#   Value: yes|no,  default: no
# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets
# restarted.
IPTABLES_SAVE_ON_RESTART="yes"

# Save (and restore) rule and chain counter.
#   Value: yes|no,  default: no
# Save counters for rules and chains to /etc/sysconfig/iptables if
# 'service iptables save' is called or on stop or restart if SAVE_ON_STOP or
# SAVE_ON_RESTART is enabled.
IPTABLES_SAVE_COUNTER="no"

# Numeric status output
#   Value: yes|no,  default: yes
# Print IP addresses and port numbers in numeric format in the status output.
IPTABLES_STATUS_NUMERIC="yes"

# Verbose status output
#   Value: yes|no,  default: yes
# Print info about the number of packets and bytes plus the "input-" and
# "outputdevice" in the status output.
IPTABLES_STATUS_VERBOSE="no"

# Status output with numbered lines
#   Value: yes|no,  default: yes
# Print a counter/number for every rule in the status output.
IPTABLES_STATUS_LINENUMBERS="yes"

# Reload sysctl settings on start and restart
#   Default: -none-
# Space separated list of sysctl items which are to be reloaded on start.
# List items will be matched by fgrep.
#IPTABLES_SYSCTL_LOAD_LIST=".nf_conntrack .bridge-nf"

/ proc / sys / net / ipv4 / ip_forward

1

Моя проблема заключается в том, что я пытаюсь освободить свои локальные адреса от отправки на внешние прокси-серверы. Я подумал, что ACCEPT может сработать, и добавил следующее в таблицу nat PREROUTING:

1    ACCEPT     tcp  --  0.0.0.0/0            10.1.1.0/24

Затем я отправляю со своего рабочего стола следующую команду curl, но это правило не срабатывает! Он запускает одно из правил циклического перебора.

curl -v -k -x 10.2.1.234:80 http://10.1.1.228/

Я пробовал похожие вещи с DNAT и FORWARD, но по какой-то причине IPTables не уважает адрес назначения. Я что-то упускаю?