利用shadowsocks搭建局域网透明网关

作者:xucaibao1979 时间:2023-06-12 04:57:30 

对于个人用户则是在手机或终端上安装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

安装配置dnsmasq

1. 安装dnsmasq


apt-get install dnsmasq

2. 修改配置文件 /etc/dnsmasq.conf


no-resolv
server=127.0.0.1#5354

3. 启动dnsmasq


service dnsmasq start

安装配置ChinaDNS

1. 参考ChinaDNS的官方文档

2. 下载ChinaDNS, 链接


wget -c https://github.com/shadowsocks/ChinaDNS/releases/download/1.3.2/chinadns-1.3.2.tar.gz

编译


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里面


cp ./src/chinadns /usr/local/bin/

4. 在/etc/init.d/下创建名为chinadns的文件,将如下代码复制进去,记得执行sudo chmod +x /etc/init.d/chinadns 以使其可执行


#!/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


service chinadns start #启动chinadns
service chinadns restart #重启chinadns
service chinadns stop #停止chinadns

安装配置shadowsocks-libev(含有ss-redir以及ss-tunnel)

1. 详细过程参见官方文档

2. 执行如下代码


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”请自行修改


{
   "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


/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, 取消注释:


net.ipv4.ip_forward=1

2. 执行命令使其生效


sysctl -p

配置iptables和ipset

1. 生成国内IP地址的ipset


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


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 查看自己的网卡代号


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

来源:https://blog.51cto.com/907832555/4711855

标签:shadowsocks,搭建,透明网关
0
投稿

猜你喜欢

  • 个人网站要想成功,我的四点经验

    2008-04-29 12:24:00
  • phpwindV6.3关于护身符道具不过期问题

    2009-02-20 16:02:00
  • PHPWind v7.3.2“引用”的返回链接如果链接到主题部分出错

    2009-05-31 17:09:00
  • 网站服务器安全需要注意三方面问题

    2009-11-24 10:05:00
  • linux安装RocketMQ实例步骤

    2021-12-11 04:36:36
  • 巴茨称雅虎振兴需要多年 拿自己比作乔布斯

    2010-03-07 08:16:00
  • PHPWind v7.3.2好友个人空间中相册链接错误

    2009-05-31 17:15:00
  • 什么样的域名算是好域名

    2007-10-26 15:45:00
  • centos8使用Docker部署Django项目的详细教程

    2022-08-26 08:30:16
  • 关于WordPress中的子目录和伪静态的一些探讨

    2010-03-21 12:30:00
  • 工作难找何不加入“人肉营销”

    2009-03-02 12:38:00
  • 百度智能手机输入法v1.0 Beta下载

    2009-12-02 11:26:00
  • 网络赚钱八大黄金准则

    2009-03-02 15:15:00
  • 搜索优化服务行业的前景与发展趋势全解析

    2008-12-10 09:14:00
  • 一个域名下安装两套科讯CMS的解决方法

    2008-05-21 13:49:00
  • 警惕:几种赚不了钱的网络赚钱方法

    2009-02-04 13:00:00
  • 新手教程③ VPS常用安全设置相关内容

    2011-05-26 12:09:00
  • JavaScript对SEO的影响及解决之道

    2008-12-18 10:34:00
  • 奥巴马为压缩开支瞄准云计算 谷歌欲抢大单

    2009-11-13 15:35:00
  • 美国主机EasyCGI购买图文教程

    2010-03-28 16:54:00
  • asp之家 网站运营 m.aspxhome.com