Цель: Чтобы воспроизвести функциональность StrongVPN на моем собственном Debian VPS. С StrongVPN, похоже, все порты на предоставленном общедоступном IP-адресе перенаправляются клиенту, то есть, например, ssh: 22 «извне» подключается к моему маршрутизатору. Также upnp / NATPMP и т.д. на клиентах моего маршрутизатора Just Work (скайп, обратно на мой Mac). Предостережение заключается в том, что серверу необходимо будет «продолжать» получать трафик на определенных портах (22, 80 и т. Д.) Для поддержания функциональности, поэтому для них потребуется «вырезать» любую пересылку, настроенную через IPtables.
Сервер: У меня есть VPS, последняя версия Debian с OpenVPN и bind9. У меня есть одна сетевая карта и один публичный IP. На этом сервере также работает apache, и мне понадобится доступ к нему по ssh для настройки.
Клиент: маршрутизатор под управлением OpenWRT. У меня есть эта настройка для использования StrongVPN в настоящее время. Я хочу перейти на собственный VPS.
необходимые: помогите с созданием подходящего набора правил для iptables.
У меня есть базовая рабочая конфигурация OpenVPN, установленная, как показано ниже, а также начало правил iptable.
client.conf:
remote 46.aaa.xxx.yyy 1194 udp
dev tun
ifconfig 172.19.233.2 172.19.233.1
secret static.key
redirect-gateway def1
server.conf:
dev tun
proto udp
port 1194
ifconfig 172.19.233.1 172.19.233.2
secret /etc/openvpn/static.key
ifconfig:
eth0 Link encap:Ethernet HWaddr 52:XXXXXXXXXXXX
inet addr:46.aaa.xxx.yyy Bcast:46.aaa.xxx.xxx Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:34338527 errors:0 dropped:20 overruns:0 frame:0
TX packets:747507 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2697230329 (2.5 GiB) TX bytes:577951758 (551.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18947 errors:0 dropped:0 overruns:0 frame:0
TX packets:18947 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2143690 (2.0 MiB) TX bytes:2143690 (2.0 MiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.19.233.1 P-t-P:172.19.233.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:164495 errors:0 dropped:0 overruns:0 frame:0
TX packets:166083 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:54062402 (51.5 MiB) TX bytes:162532235 (155.0 MiB)
iptables-save:
# Generated by iptables-save v1.4.14 on Mon Mar 30 21:47:41 2015
*nat
:PREROUTING ACCEPT [2:344]
:INPUT ACCEPT [1:172]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -d 172.19.233.0/24 -s 172.19.233.0/24 -j MASQUERADE
COMMIT
# Completed on Mon Mar 30 21:47:41 2015
# Generated by iptables-save v1.4.14 on Mon Mar 30 21:47:41 2015
*raw
:PREROUTING ACCEPT [413:36237]
:OUTPUT ACCEPT [190:21548]
COMMIT
# Completed on Mon Mar 30 21:47:41 2015
# Generated by iptables-save v1.4.14 on Mon Mar 30 21:47:41 2015
*filter
:INPUT DROP [5239:662523]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [11365:1381174]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22,53,80,123,443,1194 -j ACCEPT
-A INPUT -p udp -m multiport --dports 53,123,1194 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
-A OUTPUT -o eth+ -j ACCEPT
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Mon Mar 30 21:47:41 2015
Обновить Вместо Masquerading, следующая строка помогает с трафиком из VPN в Интернет:
iptables -t nat -A POSTROUTING ! -d 172.19.233.0/24 -j SNAT --to-source 46.aaa.xxx.yyy
Чтобы направить трафик из Интернета в VPN-клиент, похоже, работает следующее:
iptables -t nat -A PREROUTING -p tcp -m multiport ! --dports 22,53,80,123,443,1194 -j DNAT --to-destination 172.19.233.2
iptables -t nat -A PREROUTING -p udp -m multiport ! --dports 53,123,1194 -j DNAT --to-destination 172.19.233.2
Эти строки отражают порты, принятые на INPUT в таблице фильтров. Затем изменение VPN-клиента на прослушивание альтернативных портов для ssh / http и т. Д. Означает, что трафик, например, на 46.aaa.xxx.yyy: 2222 проходит к клиенту.
Но я не уверен, что это подходит для таких сервисов, как Skype / BTMM, которые требуют открытия определенных портов.
Требуются 3 правила:
iptables -t nat -A POSTROUTING -o eth0 -s 172.19.233.0/24 -j SNAT --to-source 46.aaa.xxx.bbb
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport ! --dports 22,53,80,123,443,1194 -j DNAT --to-destination 172.19.233.2
iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport ! --dports 53,123,1194 -j DNAT --to-destination 172.19.233.2
Первое правило - это основное правило SNAT для изменения IP-адреса источника на IP-адрес общедоступного.
Второе и третье правила выделяют все перечисленные порты и предотвращают их пересылку по туннелю.
То, что у вас есть, выглядит нормально. Чтобы сделать его более читаемым и поддерживаемым, я бы создал цепочку DNAT для вашего клиента. Он создает больше правил, но в будущем будет намного легче читать и добавлять / удалять / изменять порты.
iptables -t nat -N DNAT_NET2VPN
iptables -t nat -A DNAT_NET2VPN -p tcp --dport 22 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p tcp --dport 53 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p tcp --dport 80 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p tcp --dport 123 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p tcp --dport 443 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p tcp --dport 1194 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p udp --dport 53 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p udp --dport 123 -j RETURN
iptables -t nat -A DNAT_NET2VPN -p udp --dport 1194 -j RETURN
iptables -t nat -A DNAT_NET2VPN -j DNAT --to-destination 172.19.233.2
iptables -t nat -I PREROUTING -i eth0 -d 46.aaa.xxx.yyyy -j DNAT_NET2VPN
В идеале вы должны получить второй IP-адрес от своего хостинг-провайдера для использования в качестве общедоступного источника / назначения для вашего VPN-трафика, но только с 1 IP-адресом вы ограничены таким разделением диапазона портов.