Детальная маршрутизация с iptables и iproute2 через VPN

563
darkdragn

На хосте у меня дома есть хост для VPN, который мне нужен для нескольких целей. Временно проживающий в Японии, он работает как NAT для некоторых устройств, поэтому я все еще могу использовать мой NETFLIX и некоторые другие сервисы. Однако я хочу, чтобы этот сервер все еще использовал обычную сеть для загрузок / просмотра веб-страниц. В настоящее время ниже приведена копия моей конфигурации:

IP правило шоу

0: from all lookup local 32764: from all fwmark 0x1 lookup 10 32767: from all lookup main 32768: from all lookup default 

ip route show table 10

default dev ppp0 scope link 

Iptables-сохранить

*mangle :PREROUTING ACCEPT [11:822] :INPUT ACCEPT [11:822] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [8:872] :POSTROUTING ACCEPT [8:872] -A OUTPUT -s 192.168.1.102 -j MARK --set-mark 0x1 COMMIT *nat :PREROUTING ACCEPT [2831:752380] :POSTROUTING ACCEPT [107531:7116617] :OUTPUT ACCEPT [107652:7124121] -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [41463962:7467495526] -A FORWARD -i eth0 -p ppp+ -j ACCEPT -A FORWARD -i ppp+ -o eth0 -j ACCEPT COMMIT 

Я хотел бы заявить, что моя фактическая конфигурация iptables более сложна, чтобы включить несколько операторов журнала для новых соединений на стороне FORWARD и чтобы избежать слишком большого количества журналов, существует общий прием для УСТАНОВЛЕННЫХ, СВЯЗАННЫХ соединений перед журналом заявление и больше IP-адресов в таблице mangle. Эта конфигурация служит своим целям для моих устройств, однако я просто попытался ssh'ing в нее с пульта и не могу. Причина очевидна: ответы от моей службы ssh направляются по адресу eth0 вместо ppp0. Что подводит меня к моему вопросу.

Можно ли применять fwmark 1 ко всем сеансам, созданным через ppp0? Я знаю, что через некоторое копание, что conntrack может выполнять сопоставления, основанные на исходном IP-адресе исходного хоста сеанса, но могу ли я сделать что-то подобное для исходного dev?

Общая цель состоит в том, чтобы ssh можно было выполнять из частной подсети, моего исходного ip-адреса (японский ip 204.xxx.xxx.xxx) или ip vpn (23.xxx.xxx.xxx) без постоянного изменения конфигурации. Неэффективное решение, позволяющее использовать ssh только для частного и VPN, будет применять fwmark к любой подсети, кроме 192.168.xxx.xxx, со значением sport 22 в таблице mangle, однако это не позволит использовать ssh для японского ip. ,

0

1 ответ на вопрос

0
Timothy Baldwin

Use CONNMARK to mark the connections:

iptables -t mangle -A INPUT -i ppp+ -j CONNMARK --set-mark 0x1 iptables -t mangle -A OUTPUT -m connmark --mark 0x1 -j MARK --set-mark 0x1