突破学校的路由器封禁
May 23, 2010
最近学校网络中心疯狂查封小路由器,我们实验室不幸被查封。看来以后用路由上网是不太可能了。解决方法可以用 iptables 做个路由器,然后根据学校查路由的方法写防查规则,但是查路由的方法有很多种,也不知道学校是如何查的,于是这种方法就放弃了。用 squid 搭代理服务器也是很有可能被查出来的,目前比较方便的解决方法就是用 ssh 隧道方式作代理了,这种发法应该室查不出来的。
不过对于 ssh -D 所得到的 socks5 代理肯定是没有路由上网方便。毕竟不是全局代理,有些软件是用不了代理的,这就需要把 socks5 代理转换成全局的代理。对于 windows 来说很简单,装上 Proxifier 就可以了。
对于 Linux 则麻烦一些,需要 redsocks 这个程序。安装后,在 redsocks 目录下,建立 redsocks.conf 文件:
base {
log_debug = on;
log_info = on;
//日志文件,调试时可指定为标准错误"stderr"
log = "file:/home/hedaors/redsocks/socks.log";
// 是否以后台模式运行
daemon = on
redirector = iptables;
}
redsocks {
//local_ip设置为0.0.0.0则可共享,设备为127.0.0.1则只能在本机使用
local_ip = 0.0.0.0
local_port = 12345;
// 本来有的代理的IP和端口,可能是由ssh -D指定的
ip = 127.0.0.1;
port = 1080;
// known types: socks4, socks5, http-connect, http-relay
type = socks5;
}
建立个 iptables 规则脚本, tpsocks.sh
#!/bin/sh # iptables路径 IPTABLES="/usr/sbin/iptables" # redsocks路径 REDSOCKS_DIR="/home/hedaors/redsocks" REDSOCKS="$REDSOCKS_DIR/redsocks" # 配置文件中指定的端口 REDSOCKS_PORT="12345" # socks代理IP和端口 SOCKS_HOST="127.0.0.1" SOCKS_PORT="1080" # 运行redsocks if [ "$USER" != "root" ]; then echo -n 'Restarting redsocks... ' pkill -U $USER redsocks 2>/dev/null sleep 1 cd $REDSOCKS_DIR && $REDSOCKS if [ $? -eq 0 ]; then echo Done else echo Error fi exit 0; elif [ "$1" != "iptables" ]; then exit 0 fi $IPTABLES -t nat -D PREROUTING -p tcp -j REDSOCKS_FILTER 2>/dev/null $IPTABLES -t nat -D OUTPUT -p tcp -j REDSOCKS_FILTER 2>/dev/null $IPTABLES -t nat -F REDSOCKS_FILTER 2>/dev/null $IPTABLES -t nat -X REDSOCKS_FILTER 2>/dev/null $IPTABLES -t nat -F REDSOCKS 2>/dev/null $IPTABLES -t nat -X REDSOCKS 2>/dev/null # Create our own chain $IPTABLES -t nat -N REDSOCKS $IPTABLES -t nat -N REDSOCKS_FILTER # Do not try to redirect local traffic $IPTABLES -t nat -I REDSOCKS_FILTER -o lo -j RETURN ### 以下是iptables策略配置,包括白名单和黑名单,默认开启白名单 ### 你应该至少修改一行配置,也很简单 ## Do not redirect LAN traffic and some other reserved addresses. (blacklist option) # 黑名单选项:指定的分组通过默认路由转发,其它的都转向SOCKS代理 $IPTABLES -t nat -A REDSOCKS_FILTER -d 0.0.0.0/8 -j RETURN $IPTABLES -t nat -A REDSOCKS_FILTER -d 127.0.0.0/8 -j RETURN $IPTABLES -t nat -A REDSOCKS_FILTER -d 169.254.0.0/16 -j RETURN $IPTABLES -t nat -A REDSOCKS_FILTER -d 172.16.0.0/12 -j RETURN $IPTABLES -t nat -A REDSOCKS_FILTER -d 192.168.0.0/16 -j RETURN $IPTABLES -t nat -A REDSOCKS_FILTER -j REDSOCKS # Redirect all traffic that gets to the end of our chain # 将未指定的转发到SOCKS代理,实际上不会用到 $IPTABLES -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port $REDSOCKS_PORT ## Filter all traffic from the own host # 将分组转到REDSOCKS_FILTER,以保证对分组的区分处理,作用于本机 ## BE CAREFULL HERE IF THE SOCKS-SERVER RUNS ON THIS MACHINE $IPTABLES -t nat -A OUTPUT -p tcp -j REDSOCKS_FILTER # Filter all traffic that is routed over this host # 将分组转到REDSOCKS_FILTER,以保证对分组的区分处理,作用于子网 $IPTABLES -t nat -A PREROUTING -p tcp -j REDSOCKS_FILTER echo IPtables reconfigured.
打开redsocks
./tp-socks.sh
加载iptables策略
sudo ./tpsocks.sh iptables
好了,现在就可以傲视学校的网络中心了。
PS: 因为redsocks 不能把 dns 在远端解析,所以还要在 主机上做个 dns 转发,要安装 bind9 软件包。在 /etc/bind/named.conf 里的 options 字段里加入:
forwarders { 8.8.8.8; }
forward only;
重启 named 服务就行了。


博主写的非常好 顶
看了你这么多的文章就这篇写的最好了。
文章写的真好,对我有帮助。下次再学习!