Правило iptable для маршрутизации только исходящего трафика через VPN

У меня есть сервер в myserver.com, и я хочу, чтобы люди в Интернете могли получить доступ к этому серверу, используя его имя, но я хочу, чтобы весь исходящий трафик, который не является прямым ответом на входящий трафик, проходил через VPN. , Например, на сервере установлена ​​передача, и я хочу, чтобы передача всегда проходила через VPN, но если кто-то получает доступ к веб-странице на сервере, сервер не должен пытаться отвечать через VPN, потому что, очевидно, это не имеет смысла. Я настроил это один раз несколько лет назад, используя несколько приемлемых правил и маршрутов. Я помню, это было всего несколько строк, но я не могу на всю жизнь вспомнить точные правила. Я попробовал несколько вариантов правил, показанных ниже (найдено здесь и здесь ), но безрезультатно.

sudo iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443,22 -j MARK --set-mark 10
sudo ip route add table 100 default via 192.168.1.1
sudo ip rule add fwmark 10 table 100
sudo ip route flush cache

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
0
задан 31 December 2017 в 11:27

1 ответ

Понял, основываясь на информации, которую я нашел здесь . Для полноты я повторю то, что там было сказано:

Это классическая проблема. Когда вы подключаете свой сервер, используя его публичный IP-адрес, возвращаемые пакеты маршрутизируются через VPN. Вы должны заставить эти пакеты маршрутизироваться через общедоступный интерфейс Ethernet. Эти команды правила / маршрута должны выполнять свою работу:

ip rule add from x.x.x.x table 128
ip route add table 128 to y.y.y.y/y dev ethX
ip route add table 128 default via z.z.z.z

Где x.x.x.x - публичный IP-адрес вашего сервера, y.y.y.y/y - подсеть общедоступного IP-адреса вашего сервера, ethX - публичный Ethernet вашего сервера. интерфейс, и z.z.z.z ваш шлюз по умолчанию. Например:

ip rule add from 172.16.9.132 table 128
ip route add table 128 to 172.16.9.0/24 dev eth0
ip route add table 128 default via 172.16.9.1

Важно отметить, что в приведенном выше примере используется общедоступный IP-адрес сервера, но, поскольку я нахожусь за маршрутизатором, и все подключения к серверу перенаправляются с маршрутизатора, я можно просто использовать локальный IP-адрес сервера, как показано в примере ниже:

ip rule add from 192.168.1.10 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1

Вероятно, вы захотите, чтобы эти правила сохранялись после перезагрузки. Есть несколько способов, которые можно сделать, например, добавить правила в файл etc/network/interfaces в соответствующем интерфейсе, как показано ниже:

# Only packets related to connections initiated by this machine should go
# through the VPN.  All other packets should be routed around the VPN.  This
# allows this  machine to be accessed via its public IP, but prevents its
# public IP from being exposed by services like transmission.

up ip rule add from 192.168.1.5 table 128
up ip route add table 128 to 192.168.1.0/24 dev enp4s0
up ip route add table 128 default via 192.168.1.1

down ip route del table 128 default via 192.168.1.1
down ip route del table 128 to 192.168.1.0/24 dev enp4s0
down ip rule del from 192.168.1.5 table 128
0
ответ дан 31 December 2017 в 11:27

Другие вопросы по тегам:

Похожие вопросы: