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

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

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 в 12:27

2 ответа

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

Это классическая проблема. Когда вы подключаете свой сервер с использованием общедоступного 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
ответ дан 18 July 2018 в 00:09

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

Это классическая проблема. Когда вы подключаете свой сервер с использованием общедоступного 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
ответ дан 24 July 2018 в 17:10

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

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