利用shadowsocks搭建局域網(wǎng)透明網(wǎng)關(guān)
對(duì)于個(gè)人用戶(hù)則是在手機(jī)或終端上安裝ss,企業(yè)用戶(hù)這樣配置的話(huà)就比較麻煩,也不便于管理和維護(hù)。所以需要在網(wǎng)關(guān)處配置或內(nèi)網(wǎng)的某臺(tái)服務(wù)器上配置,并指向該網(wǎng)關(guān)。
思路:
1.dnsmasq+China DNS+ss-tunnel解決DNS污染的問(wèn)題
2.ss-redir配合iptables和ipset來(lái)分流國(guó)內(nèi)流量和國(guó)外流量,這樣國(guó)內(nèi)的網(wǎng)站直連,而國(guó)外網(wǎng)站則走ss-redir
網(wǎng)關(guān)方案解析:
1.dnsmasq主要起到DNS緩存作用,DNS請(qǐng)求會(huì)被發(fā)送給ChinaDNS,ChinaDNS會(huì)將請(qǐng)求同時(shí)發(fā)送給國(guó)內(nèi)的DNS服務(wù)器和ss-tunnel,ss-tunnel負(fù)責(zé)relay給ss服務(wù)器,由于ss在國(guó)外不會(huì)被污染,因此ChinaDNS會(huì)得到兩個(gè)回復(fù)并判斷其結(jié)果是否被污染,最終dnsmasq將得到未被污染的DNS應(yīng)答
2.iptables配合ipset負(fù)責(zé)區(qū)分國(guó)內(nèi)和國(guó)外流量
系統(tǒng):Ubuntu 20.0
安裝配置dnsmasq
1. 安裝dnsmasq
apt-get install dnsmasq
2. 修改配置文件 /etc/dnsmasq.conf
no-resolv server=127.0.0.1#5354
3. 啟動(dòng)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 & ###只用于測(cè)試該chinadns是否可以啟動(dòng) netstat -ntlpu ######查看啟動(dòng)的端口
3. 編譯后,將會(huì)在src目錄里生成可執(zhí)行文件chinadns,將其拷貝至 /usr/local/bin里面
cp ./src/chinadns /usr/local/bin/
4. 在/etc/init.d/下創(chuàng)建名為chinadns的文件,將如下代碼復(fù)制進(jìn)去,記得執(zhí)行??sudo chmod +x /etc/init.d/chinadns?
? 以使其可執(zhí)行
#!/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,路徑請(qǐng)根據(jù)自己相應(yīng)的填寫(xiě)。
5. 啟動(dòng)/重啟/停止 chinadns
service chinadns start #啟動(dòng)chinadns service chinadns restart #重啟chinadns service chinadns stop #停止chinadns
安裝配置shadowsocks-libev(含有ss-redir以及ss-tunnel)
1. 詳細(xì)過(guò)程參見(jiàn)??官方文檔??
2. 執(zhí)行如下代碼
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自己請(qǐng)?zhí)鎿Q為自己的VPS Server地址,“password”請(qǐng)自行修改
{ "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. 啟動(dòng)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 &
開(kāi)啟轉(zhuǎn)發(fā)
1.修改 /etc/sysctl.conf, 取消注釋:
net.ipv4.ip_forward=1
2. 執(zhí)行命令使其生效
sysctl -p
配置iptables和ipset
1. 生成國(guó)內(nèi)IP地址的ipset
curl -sL http://f.ip.cn/rt/chnroutes.txt | egrep -v '^$|^#' > cidr_cn ###如果執(zhí)行失敗可以使用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# 保留地址、私有地址、回環(huán)地址 不走代理 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為局域網(wǎng)內(nèi)不走代理的設(shè)備IP iptables -t nat -A shadowsocks -s 192.168.2.10 -j RETURN# 發(fā)往shadowsocks服務(wù)器的數(shù)據(jù)不走代理,否則陷入死循環(huán) # 替換111.111.111.111為你的ss服務(wù)器ip/域名 iptables -t nat -A shadowsocks -d 111.111.111.111 -j RETURN # 大陸地址不走代理,因?yàn)檫@毫無(wú)意義,繞一大圈很費(fèi)勁的 iptables -t nat -A shadowsocks -m set --match-set cidr_cn dst -j RETURN# 其余的全部重定向至ss-redir監(jiān)聽(tīng)端口1080(端口號(hào)隨意,統(tǒng)一就行) iptables -t nat -A shadowsocks ! -p icmp -j REDIRECT --to-ports 1080# OUTPUT鏈添加一條規(guī)則,重定向至shadowsocks鏈 iptables -t nat -A OUTPUT ! -p icmp -j shadowsocks iptables -t nat -A PREROUTING ! -p icmp -j shadowsocks
設(shè)置網(wǎng)關(guān)的默認(rèn)網(wǎng)關(guān)
透明網(wǎng)關(guān)需要設(shè)置默認(rèn)的下一跳地址,也就是說(shuō),網(wǎng)關(guān)在決定了數(shù)據(jù)包的路由之后應(yīng)該把數(shù)據(jù)包送到哪里去,在我們的家庭局域網(wǎng)環(huán)境中這個(gè)下一跳就是路由器的地址
請(qǐng)留意,192.168.2.1應(yīng)該是路由器的地址,有的是192.168.0.1,有的是192.168.1.1,需要查看具體的設(shè)置
p2p1是網(wǎng)卡,有時(shí)候可能是eth0,請(qǐng)自行通過(guò)??ifconfig?
? 查看自己的網(wǎng)卡代號(hào)
route del default route add default gw 192.168.2.1 p2p1
設(shè)置路由器的DNS和DHCP網(wǎng)關(guān)
1. 假設(shè)透明網(wǎng)關(guān)的IP地址是192.168.2.2,那么將路由器的DNS也設(shè)為192.168.2.2
2. 在路由器的DHCP子項(xiàng)下面將路由器的內(nèi)網(wǎng)網(wǎng)關(guān)設(shè)為192.168.2.2
到此這篇關(guān)于利用shadowsocks搭建局域網(wǎng)透明網(wǎng)關(guān)的文章就介紹到這了,更多相關(guān)shadowsocks搭建透明網(wǎng)關(guān)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ubuntu16.04自動(dòng)設(shè)置行號(hào)的步驟詳解
這篇文章主要介紹了ubuntu16.04自動(dòng)設(shè)置行號(hào)的步驟,文中給大家提到了Ubuntu vi設(shè)置行號(hào)的方法,感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08linux mint 18虛擬機(jī)下設(shè)置1080P分辨率的方法
下面小編就為大家?guī)?lái)一篇linux mint 18虛擬機(jī)下設(shè)置1080P分辨率的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12帶你入門(mén)Linux中size命令的6個(gè)例子
這篇文章主要給大家介紹了幾個(gè)帶你入門(mén)Linux中size命令的例子,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04linux vi命令知識(shí)點(diǎn)用法總結(jié)
在本篇文章里小編給大家整理的是關(guān)于linux vi命令的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。2019-10-10Linux系統(tǒng)實(shí)現(xiàn)ansible自動(dòng)化安裝配置httpd的方法
這篇文章主要介紹了Linux系統(tǒng)實(shí)現(xiàn)ansible自動(dòng)化安裝配置httpd的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02