GRE / IPIP Tunnnel

#GFW促进学习系列# 假如有多个VPS,那么将这些VPS连接起来的最佳方式是 GRE / IPIP tunnel Tunnel VPS A: 假设 IP 1.2.3.4 ip tunnel add tunnelName mode gre remote 2.3.4.5 ip addr add dev tunnelName 192.168.20.1/24 ip link set dev tunnelName up VPS B: 假设 IP 2.3.4.5 ip tunnel add tunnelName mode gre remote 1.2.3.4 ip addr add dev tunnelName 192.168.20.2/24 ip link set dev […]

Continue reading

Linux 策略路由与多 VPN 并存最佳实践

#GFW促进学习系列 以在路由器上配置为例. 需要 iproute2, 部分设备 (如某些 ddwrt 路由固件默认并不支持, 可能需要自己编辑安装 iproute2 包). 各个脚本路径与所用设备及系统有关, dd-wrt 固件参考 Wiki) Startup 脚本 在设备 startup 脚本里, 创建策略路由的 ip rule 规则 ip rule add from all fwmark 0x1/0x1 table 1 prio 1 ip rule add from all fwmark 0x2/0x2 table 2 prio 2 ip rule add from all table 3 prio 3 […]

Continue reading

VPN翻墙与P2P下载

#假装懂技术 #GFW促进学习 在路由器上部署了VPN Client和chnroutes后,连接到国外VPS的VPN Server后,整个区域网内所有设备能够透明翻墙,但是一些P2P软体会遇到问题。 P2P软体需要监听固定埠,并且需要外网的机器能够主动连接到运行P2P软体内网机器。方法是用路由器的“埠映射”功能,将公网IP的某些埠映射到内网某个机器上。这是通过iptables的DNAT实现的: 假设在路由器管理界面中将10400-10499埠映射到192.168.0.4,路由器会添加下面的iptables规则(由于WAN IP通常不是固定的,路由器会在ppp拨号或DHCP获得公网IP后动态添加这些规则): iptables -t NAT -A PREROUTING -d -p tcp –dport 10400:10499 -j DNAT –to 192.168.0.4 iptables -t NAT -A PREROUTING -d -p udp –dport 10400:10499 -j DNAT –to 192.168.0.4 但是部署OpenVPN和chnroutes后,国外的IP就不能主动和内网机器建立连接了(即使已经按照上面方法在路由器上开启了埠映射),因为这时国外IP看到的是VPS的IP,不是路由器的公网IP。 要使路由器部署VPN时仍然支持内网P2P下载和其它需要外网埠的应用,需要在VPS和路由器上同时增加新的iptables DNAT规则。 首先,需要知道路由器所使用的OpenVPN客户端证书的(X509) common name,这个common name是在生成证书时指定的,OpenVPN easy-rsa创建证书时默认使用文件名作为common name。可以在证书crt文件中查看其common name [email protected]:/etc/openvpn/easy-rsa/keys# cat client-common.crt Certificate: Data: Version: 3 (0x2) Serial […]

Continue reading

架设区域网翻墙网关方法

任一台linux机器都可以,不需要配置路由器。 假设LAN网段是192.168.1.0/24 首先在192.168.1.A上正常部署OpenVPN Client和chnroutes,这样本机就可以翻墙了 然后用下面命令(可以放在启动脚本rc.local里) echo 1 > /proc/sys/net/ipv4/ip_forward # or below #sysctl -w net.ipv4.ip_forward=1 # or edit /etc/sysctl.conf, # add (or edit) the following line # then run “sysctl -p” (permanant) #net.ipv4.ip_forward=1 #可以加-o tun0条件,在开启chnroutes时这使得LAN内机器能够受益于ICMP Redirect,对国内IP直接路由到原始网关 #但会在某些绑定IP和MAC的网路环境下遇到问题。 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE 就可以了了。区域网内的其它机器只需要将网关改为192.168.1.A,就可以透明翻墙并且国内外分流 此方法适用于公司内自己机器架设VPN翻墙然后分享给同事。

Continue reading

OpenVPN丢包率严重

在国外VPS上部署的OpenVPN。客户端使用static key模式连接,可能因为没有使用tls模式,埠一直没有被封。但是长时间连接VPN后丢包率很高,超过30%,有时甚至达到80%。怀疑GFW干扰。 验证方法很简单:我的VPS有两个同一网段IP,A.B.C.67和A.B.C.68,OpenVPN监听前者埠 ping A.B.C.67 丢包率为0,正常。 ping A.B.C.68 丢包率非常高,干扰严重 路由中A.B.C.67是直连的,A.B.C.68走的VPN。 结论是GFW选择性丢弃了OpenVPN的数据包。 —- VPN是我唯一选择的翻墙手段,配合第三方固件路由器、dnsmasq、chnroutes和策略路由可以达到最佳效果:LAN所有设备透明翻墙、国内外IP分流、支持CDN加速和P2P下载。这些是其它翻墙方式很难实现的。

Continue reading

route, nat, iptables 网路,路由和防火墙

#GFW促进学习系列 Route 查看路由表: #linux: $route -n $ip route list #Windows: >route PRINT 一个典型的LAN里机器的路由表:(区域网网段是192.168.0.1/24) # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 169.254.0.0/16是RFC定义的特殊link-local地址。 路由表的策略是: 当需要向某个IP发送数据时,将目标IP地址和路由表中每条路由项的掩码(Genmask) […]

Continue reading

DD Wrt 路由器级VPN翻墙方案

最近终于抽出时间, 在家里的dd wrt路由器上配置了VPN ,实现区域网内所有设备透明翻墙。这里稍微整理一下。 (注:以下内容适用于使用PPPoE协议连接公网的网路环境;并且要求dd wrt路由器具有jffs空间和USB口) 基本方案还是chnroutes的思路,通过添加国内IP路由表实现国内外IP分流:国内IP直接走ISP,国外IP全部走VPN。之所以没有用autoddvpn方案是因为autoddvpn的graceMode并不完美,它对GFW的关键字封锁(包括url query string关键字封锁和深度包检测)无能为力,仍然会被reset。而且现在大部分国外IP通过VPN访问还能起到加速作用(我用的是Linode东京机房自己架设的OpenVPN) 准备工作:开启路由器jffs空间;挂载USB存储设备到/opt;然后根据这里说明安装Optware组件。 安装配置OpenVPN 请不要使用dd wrt的Web界面,而是手工将配置文件和证书放到路由器上,然后通过命令行启动OpenVPN。配置文件和证书可以放在/jffs或/opt目录里。 创建dd wrt自启动文件 /jffs/etc/config/openvpn.startup,设置许可权为+x #!/bin/sh openvpn –config /jffs/openvpn/client.conf 在DD Wrt Web界面 Administration – Commands里添加并保存iptables防火墙规则 # allow OpenVPN iptables -I FORWARD -i br0 -o tun0 -j ACCEPT iptables -I FORWARD -i tun0 -o br0 -j ACCEPT iptables -t nat -A POSTROUTING -o tun0 -j […]

Continue reading