目标 :在我自己的Debian VPS上复制StrongVPN的function。 使用StrongVPN,表面上看,所有提供的公共IP上的所有端口都被转发到客户端,也就是说,例如,“外部”的ssh:22连接到我的路由器。 还upnp / NATPMP等在我的路由器的客户端只是工作(Skype的,回到我的Mac)。 需要注意的是,服务器需要在某些端口(22,80等)上“保持”接收stream量以保持function,所以这些将需要通过IPtables设置的任何转发“缺口”。
服务器 :我有一个VPS,最新的Debian运行OpenVPN和bind9。 我有一个NIC和一个公共IP。 这个服务器也运行Apache,我需要通过ssh访问它进行configuration。
客户端 :运行OpenWRT的路由器。 目前我已经设置了使用StrongVPN。 我想转移到使用我自己的VPS。
必需 :帮助为iptables生成一组合适的规则。
我有一个基本的,工作OpenVPNconfigurationbuild立如下以及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 PtP: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
更新而不是伪装,下面的行可以帮助将stream量从VPN发送到互联网:
iptables -t nat -A POSTROUTING ! -d 172.19.233.0/24 -j SNAT --to-source 46.aaa.xxx.yyy
为了使stream量从互联网stream向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
这些行镜像filter表中INPUT上接受的端口。 然后,更改VPN客户端以侦听ssh / http等备用端口,意味着stream量(例如,46.aaa.xxx.yyy:2222)将传递到客户端。
但我不确定这是否适用于需要某些端口打开的服务,例如Skype / BTMM。
你有什么看起来很好。 为了使其更具可读性和可维护性,我将为您的客户创build一个DNAT链。 它创build了更多的规则,但将来读取和添加/删除/更改端口要容易得多。
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
理想情况下,您将从您的托pipe服务提供商获得第二个IP作为您的VPNstream量的公共源/目的地,但只有一个IP,您将被限制为像这样分割端口范围。
所需的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
第一条规则是将源IP更改为公用IP的主要规则。
第二和第三条规则列出了所有列出的端口,防止它们被转发到隧道。