时间:2021-11-29来源:www.pcxitongcheng.com作者:电脑系统城
对于个人用户则是在手机或终端上安装ss,企业用户这样配置的话就比较麻烦,也不便于管理和维护。所以需要在网关处配置或内网的某台服务器上配置,并指向该网关。
思路:
1.dnsmasq+China DNS+ss-tunnel解决DNS污染的问题
2.ss-redir配合iptables和ipset来分流国内流量和国外流量,这样国内的网站直连,而国外网站则走ss-redir
网关方案解析:
1.dnsmasq主要起到DNS缓存作用,DNS请求会被发送给ChinaDNS,ChinaDNS会将请求同时发送给国内的DNS服务器和ss-tunnel,ss-tunnel负责relay给ss服务器,由于ss在国外不会被污染,因此ChinaDNS会得到两个回复并判断其结果是否被污染,最终dnsmasq将得到未被污染的DNS应答
2.iptables配合ipset负责区分国内和国外流量
系统:Ubuntu 20.0
1. 安装dnsmasq
1 | apt-get install dnsmasq |
2. 修改配置文件 /etc/dnsmasq.conf
1 2 |
no-resolv server=127.0.0.1 #5354 |
3. 启动dnsmasq
1 | service dnsmasq start |
1. 参考ChinaDNS的官方文档
2. 下载ChinaDNS, 链接
1 | wget -c https: //github .com /shadowsocks/ChinaDNS/releases/download/1 .3.2 /chinadns-1 .3.2. tar .gz |
编译
1 2 3 4 |
tar -xvf chinadns-1.3.2. tar .gz && cd chinadns-1.3.2 . /configure && make src /chinadns -m -p 5353 -c chnroute.txt & ###只用于测试该chinadns是否可以启动 netstat -ntlpu ######查看启动的端口 |
3. 编译后,将会在src目录里生成可执行文件chinadns,将其拷贝至 /usr/local/bin里面
1 | cp . /src/chinadns /usr/local/bin/ |
4. 在/etc/init.d/下创建名为chinadns的文件,将如下代码复制进去,记得执行sudo chmod +x /etc/init.d/chinadns
以使其可执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#!/bin/sh ### BEGIN INIT INFO # Provides: chinadns # Required-Start: $network $local_fs $remote_fs $syslog # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start ChinaDNS at boot time ### END INIT INFO### Begin Deploy Path # Put this file at /etc/init.d/ ### End Deploy PathDAEMON=/usr/local/bin/chinadns DESC=ChinaDNS NAME=chinadns PIDFILE= /var/run/ $NAME.pidtest -x $DAEMON || exit 0case "$1" in start) echo -n "Starting $DESC: " $DAEMON \ -c /etc/chinadns/chnroute .txt \ -m \ -p 5354 \ -s 114.114.114.114,127.0.0.1:5300 \ 1> /var/log/ $NAME.log \ 2> /var/log/ $NAME.err.log & echo $! > $PIDFILE echo "$NAME." ;; stop) echo -n "Stopping $DESC: " kill ` cat $PIDFILE` rm -f $PIDFILE echo "$NAME." ;; restart|force-reload) $0 stop sleep 1 $0 start ;; *) N= /etc/init .d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esacexit 0 |
注意:18行的-c /etc/chinadns/chnroute.txt,路径请根据自己相应的填写。
5. 启动/重启/停止 chinadns
1 2 3 |
service chinadns start #启动chinadns service chinadns restart #重启chinadns service chinadns stop #停止chinadns |
1. 详细过程参见官方文档
2. 执行如下代码
1 2 3 4 |
apt-get install software-properties-common -y add-apt-repository ppa:max-c-lv /shadowsocks-libev -y apt-get update apt install shadowsocks-libev |
3. 配置/etc/shadowsocks-libev/config.json, 注意,111.111.111.111自己请替换为自己的VPS Server地址,“password”请自行修改
1 2 3 4 5 6 7 8 9 10 |
{ "server" : "111.111.111.111" , "server_port" :8388, "local_address" : "0.0.0.0" , "local_port" :1080, "password" : "password" , "timeout" :60, "method" : "aes-256-cfb" , "mode" : "tcp_and_udp" } |
4. 启动ss-tunnel 与ss-redir
1 2 |
/usr/bin/ss-tunnel -c /etc/shadowsocks-libev/config .json -u -l 5300 -L 8.8.8.8:53 & /usr/bin/ss-redir -c /etc/shadowsocks-libev/config .json -b 0.0.0.0 -u & |
开启转发
1.修改 /etc/sysctl.conf, 取消注释:
1 | net.ipv4.ip_forward=1 |
2. 执行命令使其生效
1 | sysctl -p |
1. 生成国内IP地址的ipset
1 2 3 4 5 6 7 8 |
curl -sL http: //f .ip.cn /rt/chnroutes .txt | egrep - v '^$|^#' > cidr_cn ###如果执行失败可以使用cat /usr/local/src/chinadns-1.3.2/chnroute.txt | egrep -v '^$|^#' > cidr_cn ipset -N cidr_cn hash :net for i in ` cat cidr_cn`; do echo ipset -A cidr_cn $i >> ipset.sh; done chmod +x ipset.sh && sudo . /ipset .sh rm -f ipset.cidr_cn.rules ipset -S > ipset.cidr_cn.rules cp . /ipset .cidr_cn.rules /etc/ipset .cidr_cn.rules |
2. 配置iptables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
iptables -t nat -N shadowsocks # 保留地址、私有地址、回环地址 不走代理 iptables -t nat -A shadowsocks -d 0 /8 -j RETURN iptables -t nat -A shadowsocks -d 127 /8 -j RETURN iptables -t nat -A shadowsocks -d 10 /8 -j RETURN iptables -t nat -A shadowsocks -d 169.254 /16 -j RETURN iptables -t nat -A shadowsocks -d 172.16 /12 -j RETURN iptables -t nat -A shadowsocks -d 192.168 /16 -j RETURN iptables -t nat -A shadowsocks -d 224 /4 -j RETURN iptables -t nat -A shadowsocks -d 240 /4 -j RETURN # 以下IP为局域网内不走代理的设备IP iptables -t nat -A shadowsocks -s 192.168.2.10 -j RETURN # 发往shadowsocks服务器的数据不走代理,否则陷入死循环 # 替换111.111.111.111为你的ss服务器ip/域名 iptables -t nat -A shadowsocks -d 111.111.111.111 -j RETURN # 大陆地址不走代理,因为这毫无意义,绕一大圈很费劲的 iptables -t nat -A shadowsocks -m set --match- set cidr_cn dst -j RETURN # 其余的全部重定向至ss-redir监听端口1080(端口号随意,统一就行) iptables -t nat -A shadowsocks ! -p icmp -j REDIRECT --to-ports 1080 # OUTPUT链添加一条规则,重定向至shadowsocks链 iptables -t nat -A OUTPUT ! -p icmp -j shadowsocks iptables -t nat -A PREROUTING ! -p icmp -j shadowsocks |
设置网关的默认网关
透明网关需要设置默认的下一跳地址,也就是说,网关在决定了数据包的路由之后应该把数据包送到哪里去,在我们的家庭局域网环境中这个下一跳就是路由器的地址
请留意,192.168.2.1应该是路由器的地址,有的是192.168.0.1,有的是192.168.1.1,需要查看具体的设置
p2p1是网卡,有时候可能是eth0,请自行通过ifconfig
查看自己的网卡代号
1 2 |
route del default route add default gw 192.168.2.1 p2p1 |
设置路由器的DNS和DHCP网关
1. 假设透明网关的IP地址是192.168.2.2,那么将路由器的DNS也设为192.168.2.2
2. 在路由器的DHCP子项下面将路由器的内网网关设为192.168.2.2
到此这篇关于利用shadowsocks搭建局域网透明网关的文章就介绍到这了
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17