====== MiWifi with Shadowsocks ====== ===== /etc/shadowsocks.json ===== { "server":"SERVER", //这里写服务器地址,最好用ip "server_port": 5555, //shadowsocks服务器的端口 "local_address":"127.0.0.1", "local_port":1081, //本地shadows绑定的端口, "password":"PASSWORD",//shdowsocks 密码 "timeout":600, //不用改 "method":"aes-256-cfb"//加密算法, 根据服务商要求填写 } ===== /etc/init.d/myshadowsocks ===== vim /etc/init.d/myshadowsocks #!/bin/sh /etc/rc.common . /lib/functions.sh START=95 SS_REDIR_PID_FILE=/var/run/ss-redir.pid SS_TUNNEL_PID_FILE=/var/run/ss-tunnel.pid CONFIG=/etc/shadowsocks.json DNS=8.8.8.8:53 TUNNEL_PORT=5353 start() { # Client Mode #service_start /usr/bin/ss-local -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE # Proxy Mode service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SS_REDIR_PID_FILE # Tunnel service_start /usr/bin/ss-tunnel -c $CONFIG -b 0.0.0.0 -u -l $TUNNEL_PORT -L $DNS -f $SS_TUNNEL_PID_FILE } stop() { # Client Mode #service_stop /usr/bin/ss-local # Proxy Mode service_stop /usr/bin/ss-redir # Tunnel service_stop /usr/bin/ss-tunnel } /etc/init.d/myshadowsocks enable //add to the auto start jobs /etc/init.d/myshadowsocks start //start Everytime after the router restart, it will delete the script, so I put the script to /userdisk/data/bin/myshadowsocks, and do the soft link chmod +x /userdisk/data/bin/myshadowsocks ln -s /userdisk/data/bin/myshadowsocks /etc/init.d/myshadowsocks /etc/init.d/myshadowsocks ==== To support kcptun with shadowsocks ==== CONFIG_KCPTUN=/etc/shadowsocks-kcptun.json #CONFIG=/etc/shadowsocks.json CONFIG=$CONFIG_KCPTUN DNS=8.8.8.8:53 TUNNEL_PORT=5353 start() { # Client Mode #service_start /usr/bin/ss-local -c $CONFIG -b 0.0.0.0 -f $SERVICE_PID_FILE # Proxy Mode service_start /usr/bin/ss-redir -c $CONFIG -b 0.0.0.0 -f $SS_REDIR_PID_FILE # Tunnel service_start /usr/bin/ss-tunnel -c $CONFIG_DEFAULT -b 0.0.0.0 -u -l $TUNNEL_PORT -L $DNS -f $SS_TUNNEL_PID_FILE } stop() { # Client Mode #service_stop /usr/bin/ss-local # Proxy Mode service_stop /usr/bin/ss-redir # Tunnel service_stop /usr/bin/ss-tunnel } And the shadowsocks-kcptun.json { "server":"127.0.0.1", "server_port":8480, "local_address":"0.0.0.0", "local_port":1081, "password":"xxx", "timeout":600, "method":"aes-256-cfb" } And it will depends on the kcptun `cat /userdisk/data/bin/kcptun_start.sh` #!/bin/sh cd /userdisk/data/bin echo ./client_linux_arm5 -r ef.pjq.me:4001 -l :8480 -mode fast3 ./client_linux_arm5 -r ef.pjq.me:4001 -l :8480 -mode fast3 ===== dnsmasq ===== https://github.com/cokebar/gfwlist2dnsmasq gfwlist2dnsmasq.sh -s gfwlist -o /etc/dnsmasq.d/dnsmasq_list.conf ===== gfwlist iptables ===== ipset -N gfwlist iphash iptables -t nat -A PREROUTING -p tcp -m set --match-set gfwlist dst -j REDIRECT --to-port 1081 ===== Restart all the service ===== /etc/init.d/firewall restart /etc/init.d/myshadowsocks stop /etc/init.d/myshadowsocks start /etc/init.d/dnsmasq restart ===== ssh keys ===== OpenWrt is not using ~/.ssh for the keys, and it use /etc/dropbear, - https://wiki.openwrt.org/oldwiki/dropbearpublickeyauthenticationhowto - https://openwrt.org/docs/guide-user/services/ssh/openssh.server scp yourpubkey root@192.168.31.1:/tmp/ cd /etc/dropbear cat /tmp/yourpubkey >> authorized_keys chmod 0600 authorized_keys Then in your local machine vim ~/.ssh/config Add the ssh host config Host miwifi.com 192.168.31.1 IdentityFile ~/.ssh/yourprivatekey User root Then you can use the follow ssh command to login automatically ssh root@192.168.31.1 If you want to ssh to the other server in the OpenWRT, you can also add the config file, and use -F to set the ssh config file ssh -F config username@yourserver ===== Remote ssh forward ===== sh /userdisk/data/bin/ssh_forward.sh 22 32222 ssh root@ef.pjq.me -p 32222 cat /userdisk/data/bin/ssh_forward.sh #!/bin/bash if [ $# = 2 ];then localport=$1 remoteport=$2 echo ssh -gNfR ef.pjq.me:${remoteport}:localhost:${localport} pjq@ef.pjq.me ssh -F /etc/dropbear/config -gNfR ef.pjq.me:${remoteport}:localhost:${localport} pjq@ef.pjq.me #echo autossh -f -M 2"$1" -NR ef.pjq.me:${remoteport}:localhost:${localport} pjq@ef.pjq.me #autossh -f -M 2"$1" -NR ef.pjq.me:${remoteport}:localhost:${localport} pjq@ef.pjq.me echo DONE, Now you can visit it via echo http://ef.pjq.me:${remoteport} else cat < ===== Reference ===== -https://www.pleamon.com/2016/01/01/python/shadowsocks/%E5%B0%8F%E7%B1%B3%E8%B7%AF%E7%94%B1%E5%99%A8%E6%90%AD%E5%BB%BAshadowsocks/ - http://www.wenlc.cn/%E5%A6%82%E4%BD%95%E8%AE%A9%E5%B0%8F%E7%B1%B3%E8%B7%AF%E7%94%B1%E5%99%A8%E8%81%AA%E6%98%8E%E7%9A%84%E4%BD%BF%E7%94%A8shadowsocks/ - https://github.com/pjq/miwifi-ss - http://www.miui.com/thread-4408033-1-1.html