Linux – ntzyz's blog https://archive.ntzyz.io Wed, 20 Dec 2017 16:49:56 +0000 zh-CN hourly 1 https://wordpress.org/?v=5.8 使用 systemd-nspawn 快速创建 Linux 容器 https://archive.ntzyz.io/2017/12/21/use-systemd-nspawn-to-create-linux-container/ https://archive.ntzyz.io/2017/12/21/use-systemd-nspawn-to-create-linux-container/#respond Wed, 20 Dec 2017 16:32:08 +0000 https://ntzyz.io/?p=1003 继续阅读使用 systemd-nspawn 快速创建 Linux 容器]]> div.main > p { text-indent: 2em; }

使用 `systemd-nspawn` 这个命令我们可以很方便的创建一个 Linux 容器,需要的只是一个使用 systemd 作为 init 的 Linux 发行版的根文件系统。通过创建容器,我们可以获得一个可以随便折腾而不用担心损坏的 Linux 环境。这里用 Ubuntu 16.04 和 CentOS 7 为例,整个过程可以说是非常简单(虽然比起 Docker 还是麻烦了点)

对于 Ubuntu,可以直接从源里下载到它的根文件系统。下载一份,并解压到 `/var/lib/machines/ubuntu1604`:

sudo mkdir -p /var/lib/machines/ubuntu1604
wget http://mirrors.ustc.edu.cn/ubuntu-cdimage/ubuntu-base/releases/16.04.3/release/ubuntu-base-16.04.1-base-amd64.tar.gz -O /tmp/rootfs.tgz
sudo tar xpzf /tmp/rootfs.tgz -C /var/lib/machines/ubuntu1604

OK,到此为止我们就得到了一个可以被 `systemd-nspawn` 启动的 rootfs,不过我们还需要一些配置,例如修改 root 密码等等:

chroot /var/lib/machines/ubuntu1604 /usr/bin/passwd root
echo ubuntu > /var/lib/machines/ubuntu1604/etc/hostname

下面只需要用 `systemd-nspawn` 来“启动”这个容器:

systemd-nspawn -b -D /var/lib/machines/ubuntu1604 --bind=/lib/firmware

这样就完成了!相当简单吧~输出内容大概是这样:

Spawning container ubuntu1604 on /var/lib/machines/ubuntu1604.
Press ^] three times within 1s to kill container.
systemd 229 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN)
Detected virtualization systemd-nspawn.
Detected architecture x86-64.

Welcome to Ubuntu 16.04.1 LTS!

Set hostname to .
Failed to install release agent, ignoring: No such file or directory
[  OK  ] Listening on Journal Socket (/dev/log).
[  OK  ] Started Dispatch Password Requests to Console Directory Watch.
[  OK  ] Started Forward Password Requests to Wall Directory Watch.
[  OK  ] Reached target Paths.
[  OK  ] Reached target Remote File Systems (Pre).
[  OK  ] Reached target Remote File Systems.
[  OK  ] Listening on /dev/initctl Compatibility Named Pipe.
[  OK  ] Created slice System Slice.
[  OK  ] Reached target Slices.
[  OK  ] Created slice system-getty.slice.
[  OK  ] Reached target Swap.
[  OK  ] Reached target Encrypted Volumes.
[  OK  ] Listening on Journal Socket.
         Mounting Huge Pages File System...
[  OK  ] Reached target Sockets.
         Starting Remount Root and Kernel File Systems...
         Mounting POSIX Message Queue File System...
         Starting Journal Service...
         Mounting FUSE Control File System...
[  OK  ] Mounted POSIX Message Queue File System.
[  OK  ] Mounted Huge Pages File System.
[  OK  ] Mounted FUSE Control File System.
[  OK  ] Started Remount Root and Kernel File Systems.
[  OK  ] Reached target Local File Systems (Pre).
[  OK  ] Reached target Local File Systems.
         Starting Load/Save Random Seed...
[  OK  ] Started Load/Save Random Seed.
[  OK  ] Started Journal Service.
         Starting Flush Journal to Persistent Storage...
[  OK  ] Started Flush Journal to Persistent Storage.
         Starting Create Volatile Files and Directories...
[  OK  ] Started Create Volatile Files and Directories.
         Starting Update UTMP about System Boot/Shutdown...
[  OK  ] Reached target System Time Synchronized.
[  OK  ] Started Update UTMP about System Boot/Shutdown.
[  OK  ] Reached target System Initialization.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Basic System.
         Starting Permit User Sessions...
         Starting LSB: Set the CPU Frequency Scaling governor to "ondemand"...
         Starting /etc/rc.local Compatibility...
[  OK  ] Started Daily apt activities.
[  OK  ] Reached target Timers.
[  OK  ] Started Permit User Sessions.
[  OK  ] Started /etc/rc.local Compatibility.
[  OK  ] Started Console Getty.
[  OK  ] Reached target Login Prompts.
[  OK  ] Started LSB: Set the CPU Frequency Scaling governor to "ondemand".
[  OK  ] Reached target Multi-User System.
[  OK  ] Reached target Graphical Interface.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Started Update UTMP about System Runlevel Changes.

Ubuntu 16.04.1 LTS ubuntu console

ubuntu login: 

值得注意的是,这个容器和虽然看起来很像那么一回事儿,但是它的内核和网络仍然是使用的宿主机的,如果宿主机已经运行了 sshd,容器里尝试运行则会提示端口被占用,不过 `systemd-nspawn` 提供了桥接网络之类的功能,具体方法可以 Google。关闭容器很简单,在里面执行 `systemctl poweroff` 即可。

CentOS 稍微复杂一点,因为他没有直接提供最小的 rootfs,我们要自己从 ISO 中解压安装,整个过程如下:

# 切换到超级用户
sudo -s

# 建立一些文件夹
mkdir -p /var/lib/machines/centos7
mkdir -p /tmp/iso
mkdir -p /tmp/squashfs
mkdir -p /tmp/rootfs

# 挂载 CentOS 7 的系统盘
mount /mnt/Disk2/OS/Linux/CentOS-7-x86_64-Minimal-1708.iso /tmp/iso
mount /tmp/iso/LiveOS/squashfs.img /tmp/squashfs
mount /tmp/squashfs/LiveOS/rootfs.img /tmp/rootfs

# 复制系统文件,速度看你的硬盘,可能会比较慢_(:з」∠)_
cp -pr /tmp/rootfs/* /var/lib/machines/centos7

# 卸载一些不会再用到的镜像
umount /tmp/{rootfs,squashfs}

# 安装一下 yum
mkdir -p /var/lib/machines/centos7/mnt/iso
mount --bind /tmp/iso /var/lib/machines/centos7/mnt/iso

chroot /var/lib/machines/centos7 /usr/bin/rpm -ivh --nodeps /mnt/iso/Packages/rpm-4.11.3-25.el7.x86_64.rpm
chroot /var/lib/machines/centos7 /usr/bin/rpm -ivh --nodeps /mnt/iso/Packages/yum-3.4.3-154.el7.centos.noarch.rpm

# 配置一下基本系统,执行最小安装
echo "[cdrom]
name=Install CD-ROM 
baseurl=file:///mnt/iso
enabled=0
gpgcheck=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-CentOS-7" > /var/lib/machines/centos7/etc/yum.repos.d/cdrom.repo

chroot /var/lib/machines/centos7 /usr/bin/yum --disablerepo=\* --enablerepo=cdrom -y reinstall yum
chroot /var/lib/machines/centos7 /usr/bin/yum --disablerepo=\* --enablerepo=cdrom -y groupinstall "Minimal Install"

# 删掉 ISO 源
rm /var/lib/machines/centos7/etc/yum.repos.d/cdrom.repo

# 卸载 ISO
umount /var/lib/machines/centos7/mnt/iso /tmp/iso

# 设置一下 root 密码之类的
chroot /var/lib/machines/centos7 /usr/bin/passwd root

# 进入虚拟环境,执行这段脚本
systemd-nspawn -D /var/lib/machines/centos7 --bind=/lib/firmware << _END_POSTINSTALL_
# 换源,先备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl https://lug.ustc.edu.cn/wiki/_export/code/mirrors/help/centos\?codeblock=3 > /etc/yum.repos.d/CentOS-Base.repo

# 更新
yum makecache
# 安装一个缺失的依赖,为什么会缺我也不知道…
yum install lvm2-libs -y

# 这些服务是作为一个容器不需要的,把他们关掉
systemctl disable auditd.service
systemctl disable kdump.service
systemctl disable multipathd.service
systemctl disable network.service
systemctl disable smartd.service
systemctl disable lvm2-monitor.service
systemctl disable sshd.service

# 设置 locale,如果需要中文就用 zh_CN.UTF-8
echo LANG=en_US.UTF-8 > /etc/locale.conf

# 设置主机名
echo CentOS-7 > /etc/hostname

_END_POSTINSTALL_

# 然后就可以开机了(((
systemd-nspawn -b -D /var/lib/machines/centos7 --bind=/lib/firmware

参考资料:
]]>
https://archive.ntzyz.io/2017/12/21/use-systemd-nspawn-to-create-linux-container/feed/ 0
小实验:扩展 PS4 的存储 https://archive.ntzyz.io/2017/09/18/extend-storage-with-iscsi-and-usb-gadget-for-your-ps4/ https://archive.ntzyz.io/2017/09/18/extend-storage-with-iscsi-and-usb-gadget-for-your-ps4/#respond Mon, 18 Sep 2017 05:40:11 +0000 https://ntzyz.io/?p=866 继续阅读小实验:扩展 PS4 的存储]]> PS4 到手之后游戏买买买,500G的磁盘换成了1TB也快用完了,但是买2TB的话就感觉很麻烦,一来是要全部重新迁移数据,二是换下来的1TB WD Black也没其他地方用,就很难受。

查了一圈后发现,PS4 在某次系统更新后提供了将 USB 存储格式化为扩展存储的功能,也就是说可以用 USB3.0 的移动硬盘来装游戏。可能是有偏见吧我一直觉得移动硬盘是非常不靠谱的东西,不过这个特性倒是一个不错的拓展存储的切入点。

要说扩展存储,如果是普通的 PC 上有这个需求,解决方法非常多,比如我可以建立一个 SMB 协议的共享,Windows 和 macOS 原生兼容,Linux 只需要加载 cifs.ko 即可;当然 NFS 来实现也没有任何问题;如果对加密有需求,或是需要一个裸磁盘,还可以用 iSCSI 来做到。可是 PS4 目前没有破解,以上方法都不可行。

于是就想,PS4 支持 USB 存储的扩展,我能不能将上面提到的一些方式通过 USB 暴露给 PS4 来实现呢?比如这样一个设备:它本身是一个 USB 从机,同时有一个 GbE 接口,可以千兆访问到局域网里的 iSCSI Target,然后通过一些魔法,将 iSCSI Target 拿到的磁盘设备直通到 USB,让 PS4 认为这是一个大容量的 USB 存储。

为了探究这个想法的可行性,我就去某宝买了个 RK3399 的开发板:这货带一个 USB Type-C 的接口和一个千兆以太网接口,同时还有这不错的 CPU 性能,只可惜 Mali GPU 的驱动暂时没法搞到。软件上支持 Android 和 Linux。

板子到手上电后发现预装了 Android 和 Ubuntu 双系统,二话不说果断重灌,Android 我没有需求,而 Ubuntu 不太想用(Arch 大法好),于是找了张 SD 卡往里面放了 ARM64 的 Arch Linux ARM 的根文件系统,使用 Rockchip 的工具修改 parameter 分区内容,指定 root 分区为 SD 卡并重启,等到开机结束后就可以安装 arch-install-scripts 并把 eMMC 内的 Ubuntu 彻底带走了。不过记得要备份一下 Ubuntu 的 /system 目录,里面的 firmware 以后还是要用的(鬼知道为什么是 /system/etc/firmware 而不是 /etc/firmware,rockchip 改过的内核毒性不小)。如果对 U-boot 没有操作需求的话这样就基本够用了,重启后进入 Arch Linux 并进行基本的配置(网络,pacman 源,blabla)。想要使用全功能的 U-boot 的话,可以参考这篇里的一些信息自己编译 rockchip 提供的 u-boot,firefly 给的裁剪严重基本没法用。

然后就要试试如何将 TypeC 接口的 USB 变身成为一个假 U 盘了。本来以为这块要写内核模块的,结果看了看文档发现其实很简单:内核将 USB Gadget 的配置接口通过一个文件系统暴露给了用户,只需要在这个 configfs 里面比划比划,创建点文件,搞点链接就可以完成了。代码和注释放一起吧:

# 首先是要确认一下 configfs 有没有挂载,以及挂载的位置
mount | grep configfs
# 嗯,通常都是在 /sys/kernel/config,于是我们就过去呗
pushd /sys/kernel/config/usb_gadget
# 创建一个 USB Gadget 并添加一个大容量存储的 function
mkdir g.1/functions/mass_storage.0 -p
# 等待内核完成相关工作(脚本时必要)
sleep 1
# 写入需要被直通的设备文件,或者直接是文件也行,不过小心 MMC 被写穿(笑)
# 这里先用 SD 卡试试
echo "/dev/mmcblk0" > g.1/functions/mass_storage.0/lun.0/file
# 标记为不可移动,即不是 U 盘
echo 0 > g.1/functions/mass_storage.0/lun.0/removable

# 创建一些字符串啊和 ID 的信息
mkdir g.1/strings/0x409
mkdir -p g.1/configs/c.1/strings/0x409
echo 0xa4a2 > g.1/idProduct
echo 0x0525 > g.1/idVendor
echo 1234567890 > g.1/strings/0x409/serialnumber
echo ntzyz > g.1/strings/0x409/manufacturer
echo "iSCSI over USB" > g.1/strings/0x409/product

# 创建配置,并将之前设置的 function 链接过来
echo "cnf1" > g.1/configs/c.1/strings/0x409/configuration
ln -s g.1/functions/mass_storage.0 g.1/configs/c.1

# 指定这个 Gadget 使用的控制器,可以通过 find /sys -name gadget 来确认
echo fe800000.dwc3 > g.1/UDC

# 回到之前的CWD
popd

掏出你的 USB 3.0 Type-C 数据线,连接好 RK3399 和你的电脑,然后执行这个脚本,不出意外的话就能看到新硬件了,同时内核大概有这些输出:

[   52.614900] fusb302 4-0022: PD disabled
[   52.617919] cdn-dp fec00000.dp: [drm:cdn_dp_pd_event_work] Not connected. Disabling cdn
[   52.628791] rockchip-dwc3 usb@fe800000: USB peripheral connected
[   52.636063] android_work: did not send uevent (0 0           (null))
[   52.649973] android_work: sent uevent USB_STATE=CONNECTED
[   52.679112] configfs-gadget gadget: super-speed config #1: c
[   52.679840] android_work: sent uevent USB_STATE=CONFIGURED

这就完成了!是不是很简单?

然后就是让 RK3399 能访问到一个远程磁盘了,当然你也可以往 RK3399 上加 SATA 硬盘,不过这样似乎还不如直接用移动硬盘来得方便(笑)。原则上你可以用 NFS/CIFS 之类的网络文件系统,访问到 NAS 的一个分区,然后 DD 出一个比较大的稀疏磁盘镜像,将他格式化,然后直接用这个文件来充当磁盘。可是不知道为什么我这样试的时候,写入一个 1GB 的动画片在刚起步的时候飙到了 300MB/s,没到两秒就降速到了 0,同时看 RK3399 的串口输出看到了内核 panic 的报错((

果然这种情况还是需要用 iSCSI 啊!Windows 上如果想开启 iSCSI 目标服务,可以选择换一个 Server 版的 Windows,内置了 iSCSI 目标服务器的功能,当然买不起/不想换的可以找一些用户层的软件来实现,比如对个人用户免费的 StarWind ,不过这货好像不支持创建稀疏的 img,有点蛋疼。Linux 上可以参考 Arch Wiki 上 Open iSCSI 相关条目的信息。iSCSI 目标服务的配置这里就不废话了,比较简单,用户认证什么的用 CHAP 就行了,不需要太复杂。

RK3399 方面,首先向 iSCSI 服务器发起一个 sendtargets 请求:

iscsiadm -m discovery -t sendtargets -p 10.10.28.75

得到 target 列表后就可以登陆了:

iscsiadm -m node --targetname=iqn.2008-08.com.starwindsoftware:ntzyz-gen8-ps4volume --login

不出意外这时候内核会甩你一脸日志,比如发现 sda 这种,这时候你就成功的创建了与服务器的连接,所有在 sda 上的变更都会被写入到远程磁盘上。只要将这个设备文件作为 Gadget 中 Mass Storage 的 lun.0 对应的 file,就实现了我们的终极目标:USB 接口的远程磁盘!

将 USB 口从电脑上拔下,插到隔壁 PS4 上,进入设置->周边设备->USB 设备就能看到一个名为iSCSI over USB,制造商为 ntzyz 的移动硬盘,将他格式化为扩展存储后就可以使用了。经测试,将 NieR Automatic 移动到该拓展存储并执行没有明显的体验上的区别。

]]>
https://archive.ntzyz.io/2017/09/18/extend-storage-with-iscsi-and-usb-gadget-for-your-ps4/feed/ 0
网易云音乐 Linux 版高分屏问题解决方案 https://archive.ntzyz.io/2017/09/07/fix-cloud-music-linux-client-hidpi-issue/ https://archive.ntzyz.io/2017/09/07/fix-cloud-music-linux-client-hidpi-issue/#respond Thu, 07 Sep 2017 05:54:42 +0000 https://ntzyz.io/?p=861 继续阅读网易云音乐 Linux 版高分屏问题解决方案]]> .emm > p { text-indent: 2em; }

网易云音乐 Linux 版推出很久了,肯定已经有很多人反馈过 HiDPI 下不能正常工作的问题了,然而似乎网易生娃不养娃,版本号 1.0.0 从一开始就没有变过(

在网上搜索 HiDPI 下字太小难以阅读就能找到最简单的解决方案:添加参数 `–force-device-scale-factor=2` 就能让他强制两倍渲染。不过这个方法在我这儿(ArchLinux,KDE)上并不是什么好的解决方案:启动程序时,程序按照环境 DPI 创建了窗体,但是内容部分则依然使用原分辨率渲染,效果就是只有坐上 1/4 能正常显示内容,剩下的都是白色的空白。只要我的全局 DPI 不是 100%,这些空白就一直存在。

既然网易支持强制缩放倍数,只要我让他认为自己运行的环境是 100% DPI 即可,解决方案如下:

QT_SCREEN_SCALE_FACTORS=1 /usr/bin/netease-cloud-music --force-device-scale-factor=2

为了方便使用,我们可以在 `/usr/local/bin/` 下创建同名脚本,执行后就可以直接 pin 到任务栏了。

]]>
https://archive.ntzyz.io/2017/09/07/fix-cloud-music-linux-client-hidpi-issue/feed/ 0
简易 Web Terminal 的实现 https://archive.ntzyz.io/2017/08/26/implementation-of-web-terminal/ https://archive.ntzyz.io/2017/08/26/implementation-of-web-terminal/#respond Sat, 26 Aug 2017 09:02:30 +0000 https://ntzyz.io/?p=848 继续阅读简易 Web Terminal 的实现]]> p.indent { text-indent: 2em; }

说起来也是有趣,本来是研究一下 WebSocket 准备给论坛/博客增加实时更新之类的特性,结果看着看着就脑洞大开搞了这么个玩意儿((

首先明确一下,这里说的 Web Terminal 是指再网页中实现的,类似于终端模拟器的玩意儿。举例的话应该是类似于 Linode 的 LiSH 和 Visual Studio Code 中内置的那个终端,而不是 ConoHa 提供的 VNC 式的终端(其实那玩意儿是个远程桌面了)。最终目标的效果就是和 Secure Shell 类似:打开一个网页,就能启动一个网页所在服务器的 shell,比如到处都有的 bash 或者非常强大的 zsh,然后就可以与这个终端进行交互式的操作,比如使用 vim 编辑文件,或者查阅 man 中的手册。

让我们从最简单的一些需求开始,如果只是需要远程执行一些命令或者脚本,那么我们只需要任何一个能调用系统 shell 的编程语言就行了。这里以 node 为例,代码很简单:

'use strict';
const express = require('express');
const child_process = require('child_process');
let server = express();

server.get('/eval', (req, res) => {
  if (req.query.cmd) {
    child_process.exec(req.query.cmd, (err, stdout, stderr) => {
      res.send({
        status: 'ok',
        stdout,
        stderr,
      });
    })
  } else {
    return res.send({
      status: 'ok';
    })
  }
});

server.listen(8123, 'localhost', () => {
 console.log(`Server running at http://localhost:8123`);
});

安装好 express 后,执行这段代码,打开另一个终端,执行代码:

curl 'http://localhost:8123/eval?command=ls'

我们就能看到 node 所在目录的文件列表了。看起来不错,但是如果需要执行面向终端的程序呢?

面向终端的程序,顾名思义,这种程序需要控制一个终端,同时有能力进行 job-control(fg 等) 和终端相关的信号(SIGINT 等)。典型的面向终端的程序就有:nano、vim、htop、less,等等。要让这些程序执行,我们需要通过 POSIX 的接口来创建一个伪终端(pseudoterminal,简称 pty)。

伪终端由两个虚拟的设备组成:一个 pseudoterminal master 和一个 pseudoterminal slave(pts)。这两个虚拟设备之间可以互相通讯,类似一个串口设备。两个进程可以打开这两个虚拟设备进行通讯,类似于一个管道。伪终端的关键就是 pts,这个设备在操作上和真实的终端设备(tty1, ttyS1, …)基本一致,不同之处在于 pts 没有速率之类的属性。所有能在 tty 上使用的操作都能在 pts 上使用,不支持的部分属性会被自动忽略,反正没什么卵用((

知道这些东西之后,终端模拟器的工作原理就很简单了:终端模拟器创建了一对 pty 设备,同时在 pty slave 上启动当前用户的默认 shell,比如`execlp(“/usr/bin/zsh”, [ “–login” ])`。pts 会将程序所有的输出发送给 pty master,终端模拟器在拿到这些数据后,再按照指定终端的标准将其输出。同时,所有的键盘输入也会发送给 pty slave。大致就是如下:

+----------+
| X Server |
+----+-----+
     |
+----+--------------+  +------------+
| Terminal Emulator +--+ pty master +
+-------------------+  +--+-----+---+  
                          |     |
                       +--+-----+--+  
                       + pty slave +
                       +--+-----+--+  
                          |     |
        +-----------------+-----+---+
        + Terminal-oriented program |
        +---------------------------+

Secure Shell 的远程登录的原理同样类似:ssh 客户端首先和 sshd 协商加密,互相认证,然后建立一个 SSH channel,由服务端创建一对 pty,然后将 pty master 的输出放到 SSH channel 中。ssh 客户端与服务端之间通过 SSH channel 通讯,便实现了远程登陆。

那么,Web Terminal 的实现思路就很明确了:在浏览器上,我们需要找到一个比较好用的终端框架(或者自己撸一个),在服务器上,我们需要一个当前程序语言与 ptmx 的接口(或者自己撸一个)。而通讯方面,SSH 用的是 TCP,Web 上能用的也就是 WebSocket 了(除非你想 XMLHttpRequest 然后疯狂刷新),这里能找到框架最好,全都自己撸就太累了(

嘛。虽然 npm 上坑爹的包非常多,但是在这种时候基本上还是能做到想要啥就有啥的。这里我选择了 xterm.js 作 HTML5 中的终端组件,node-pty 做服务端的 pty 操作工具。这两个也正是 Visual Studio Code 中内置的终端所采用的依赖。WebSocket 方面,我选择了 Socket.IO 这个框架。当然,为了让 ES6 Module 正常工作,我们还需要用
webpack 来处理。依靠着强大的 xterm.js 和 node-pty,需要我们来完成的工作非常少。以下晒代码:

服务端 JavaScript :

const express = require('express');
const site = express();
const http = require('http').Server(site);
const io = require('socket.io')(http);
const net = require('net');
const pty = require('node-pty');

site.use('/', express.static('.'));

io.on('connection', function (socket) {
  let ptyProcess = pty.spawn('bash', ['--login'], {
    name: 'xterm-color',
    cols: 80,
    rows: 24,
    cwd: process.env.HOME,
    env: process.env
  });
  ptyProcess.on('data', data => socket.emit('output', data));
  socket.on('input', data => ptyProcess.write(data));
  socket.on('resize', size => {
    console.log(size);
    ptyProcess.resize(size[0], size[1])
  });
});

http.listen(8123);

浏览器端 JavaScript:

import Terminal from 'xterm';
import 'xterm/src/xterm.css';
import io from 'socket.io-client';

Terminal.loadAddon('fit');

const socket = io(window.location.href);

const term = new Terminal({
  cols: 80,
  rows: 24,
});
term.open(document.getElementById('#terminal'));
term.on('resize', size => {
  socket.emit('resize', [size.cols, size.rows]);
})

term.on('data', data => socket.emit('input', data));

socket.on('output', arrayBuffer => {
  term.write(arrayBuffer);
});

window.addEventListener('resize', () => {
  term.fit()
});
term.fit()

Webpack 配置:

const path = require('path');

module.exports = {
    entry: "./src/entry.js",
    output: {
        path: path.join(__dirname, 'dist'),
        filename: "bundle.js"
    },
    module: {
        loaders: [
            { test: /\.css$/, loader: "style-loader!css-loader" }
        ]
    }
};

运行效果:

完整的代码可以参考 GitHub 上的 playground 仓库。

]]>
https://archive.ntzyz.io/2017/08/26/implementation-of-web-terminal/feed/ 0
[OpenWrt] 为 x86_64 平台编译自己的 OpenWrt https://archive.ntzyz.io/2017/01/28/compile-openwrt-x86-64/ https://archive.ntzyz.io/2017/01/28/compile-openwrt-x86-64/#comments Sat, 28 Jan 2017 08:57:41 +0000 https://ntzyz.io/?p=781 继续阅读[OpenWrt] 为 x86_64 平台编译自己的 OpenWrt]]> p.indent { text-indent: 2em }

OpenWrt 是一个十分著名的嵌入式 Linux 发行版,被广泛使用在家庭路由器的魔改上。其前身是 Linksys 被迫开源的 WRT54G 固件。

最近几天买了一个 Intel J1900 CPU 的板子,集成了四张千兆网卡,于是就打算拿来跑 OpenWrt x86。但是呢,OpenWrt 官方放出的 x86_64 固件中使用的标准库是 uClibc,一个面向嵌入式 Linux 系统的小型的 C 标准库。可是手里的硬件确实正儿八经的 BayTrail CPU,使用 uClibc 未免感觉太憋屈了。不仅如此,绝大多数编译好的二进制软件都是使用 GNU C Library,同时 uClibc 没有提供对 glibc 的兼容,所以即便我是 x86 的 CPU,所有软件也都需要使用 OpenWrt 重新编译,很繁琐。于是,打算重新编译自己的 OpenWrt。

首先是获得源码,需要注意的是 git.openwrt.com 上的代码已经很久没有更新了,所有代码都应该从 GitHub 上取得。

git clone -b v15.05.1 https://github.com/openwrt/openwrt.git
cd openwrt

当然还要准备一下依赖:

sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev

然后更新 OpenWrt 的软件列表:

./scripts/feeds update -a
./scripts/feeds install -a

并生成默认配置:

make defconfig

然后就可以开始配置了:

make menuconfig

这里面大多数内容都没什么好说的,如果不明确就去搜索。不过强烈推荐激活 Global build settings 中的 Select all kernel module packages by default,软件没编译可以随时 make menuconfig && make,但是内核模块如果重新编译就不得不将板子上已经部署好的 OpenWrt 完全替换,因为每一次编译内核和内核模块都是与之前不兼容的。当然 CPU 和 SSD 足够大的话你顺手选上 Select all userspace packages by default 是最好的。至于 C 标准库的选择,可以在 Advanced configuration options > Toolchain Options > C Library implementation 中修改。如果你选择了很多包内置到 rootfs 时,默认的 IMG 文件可能不够用,此时你就需要修改 Target Images 中的 Root filesystem partition size,和 ext4 中的 Maximum number of inodes in root filesystem。

完成之后,保存并退出。准备修改内核配置:

make kernel_menuconfig

这里面大部分都不需要编辑,但是 OpenWrt 默认的配置没有提供对 AHCI 的支持,我们需要自己将他选中。同时多线程啊大内存什么的,自己看着改改。

以上步骤准备完成了之后,开始下载需要的各种源码包,此处建议使用全局代理或者 VPN,以避免不必要的麻烦。

make download -j100

期间如果出现下载失败或是其他异常导致中断,你可以 make download V=s 查看详细输出,并手动下载对应的包,保存至 dl 目录下。若校验和一致,就不会再去下载了。

最后就是编译啦,OpenWrt Buildroot 首先回去编译 toolchain,然后编译内核和软件包。

make

或者使用多线程加速:

make -j24 # if you have 2 * E5 26xx

如果过程中出现错误,同样是使用 make V=s -j1 编译,并等着看错误输出。如果想睡觉时编译呢,可以将编译日志重定向到文件中来方便查看问题:

make V=s | tee buid.log
]]>
https://archive.ntzyz.io/2017/01/28/compile-openwrt-x86-64/feed/ 2
[OpenWrt] 简单的策略路由 https://archive.ntzyz.io/2016/10/30/simple-policy-routing-on-openwrt/ https://archive.ntzyz.io/2016/10/30/simple-policy-routing-on-openwrt/#respond Sun, 30 Oct 2016 09:24:44 +0000 https://ntzyz.io/?p=722 继续阅读[OpenWrt] 简单的策略路由]]> p.indent { text-indent: 2em; }

上学期期末移动宽带质量不断劣化,我们宿舍被迫转向电信宽带。为了解决那个该死的防共享机制,我自费购买了一个坑爹的破解路由器,本质就是一个替换了 PPP 的 OpenWrt 路由器。选择购买而不是自己动手破解的主要原因是不想在这上面消耗太多精力,既然有现成的解决方案,那就掏钱解决了(

那个破解的路由器很渣,是个看起来就不像那种能拖宿舍里所有电子产品的破路由,所以我只将其作为拨号路由,而主要的 NAT 工作和 Access Point 仍然交给 WNDR 4300 来完成。电信的路由器 LAN IP: 192.168.43.1 并开启 DHCP,然后 WNDR 4300 直接将 WAN 接至任意一个 LAN 口,完成后顺手关掉了破解路由器的 WiFi

当然大家都知道电信的国际出口有多惨,上个 Google 查东西都让人想砸电脑(不),同时宿舍移动的接口不用白不用。于是决定尝试一下组两个网关,让部分海(fan)外(qiang)流量走江苏移动,其余的走江苏电信,来提升整体的网络体验

首先是要修改 WNDR 4300 上的交换机配置,让他将一个 LAN 口以 WAN 的形式工作:在 OpenWrt 的交换机配置界面,添加一个 VLAN,ID 任意,将 CPU 和准备当作 WAN 的那个口分别设置为 tagged 和 untagged,剩下的其他端口设置成关就好了。

switches

然后去网络 -> 接口,添加一个类型为 PPPoE 的接口,物理设置接口为刚刚创建的 VLAN 接口。因为路由器的主要接口仍然是之前的 DHCP 客户端,所以我们要去掉高级设置中的使用默认网关。填写好 PAP/CHAP 用户名/密码后,提交变更。不出意外就成功的拨号完毕,下面需要的就是如何策略路由了。

int

使用 SSH 连接到路由器,更新软件包并安装 iproute2。完成后输入 ip route,可以看到类似这样的一行结果:

10.49.196.1 dev pppoe-cmcc proto kernel scope link src 10.49.199.127

很容易想到 10.49.196.1 就是移动 PPPoE 的网关了,我们只要将部分网段的默认路由修改到这个网关上,就可以实现高速访问国际互联网了(

#!/bin/sh

INT=pppoe-cmcc
TABLE=cmcc

DEST=`ip route show dev $INT | head -n 1 | awk '{print $1}'`

# ConoHa JP
route add -net 133.130.96.0/19 gw $DEST
route add -net 133.130.88.0/21 gw $DEST
route add -net 133.130.126.0/24 gw $DEST

# Linode JP
route add -net 106.185.24.0/21 gw $DEST
route add -net 106.186.16.0/20 gw $DEST

# CCZU CERNET
route add -net 219.230.144.0/20 gw $DEST

# JS Cernet
route add -net 211.65.74.0/24 gw $DEST

# CCZU Spoc
route add -net 202.195.100.0/24 gw $DEST

嗯,最基本的目的已经达到了。无压力播放 1080P 清晰度的油管视频最棒了(

不过不久又有新的问题了,江苏电信的校园宽带采用的是动态密码,PPPoE 断开后因为密码失效,无法自动恢复接口。这对于寝室一个玩梦幻西游的同学来说是非常恐怖的——每次掉线都要花大量的时间重新登陆所有的账号。

于是,经过讨论决定,将 192.168.1.240/28 这个网段献祭出来,做纯移动的接口,以用来挂机下载或者是长时间不掉线的网络。经过编辑的新脚本如下:

#!/bin/sh

INT=pppoe-cmcc
TABLE=cmcc

DEST=`ip route show dev $INT | head -n 1 | awk '{print $1}'`
SRC=`ip route show dev $INT | head -n 1 | awk '{print $7}'`

if [ "$1" == "pppoe-cmcc" ]; then
    # Remove all old rules
    # while ip rule delete from 0/0 to 0/0 table cmcc 2>/dev/null; do true; done

    # Add rules to let 192.168.1.240/28's traffic to CMCC gateway.
    ip rule add from 192.168.1.240/28 table cmcc priority 32765
    ip rule flush cache
    ip route add default via $SRC dev $INT table cmcc

    # ConoHa JP
    route add -net 133.130.96.0/19 gw $DEST
    route add -net 133.130.88.0/21 gw $DEST
    route add -net 133.130.126.0/24 gw $DEST

    # Linode JP
    route add -net 106.185.24.0/21 gw $DEST
    route add -net 106.186.16.0/20 gw $DEST

    # CCZU CERNET
    route add -net 219.230.144.0/20 gw $DEST

    # JS Cernet
    route add -net 211.65.74.0/24 gw $DEST

    # CCZU Spoc
    route add -net 202.195.100.0/24 gw $DEST
fi

将这个脚本放置到 /etc/ppp/ip-up.d/cmcc 中,并添加可执行权限,我们的简单的策略路由脚本就能在移动拨号成功后自动应用到系统路由表上。

]]>
https://archive.ntzyz.io/2016/10/30/simple-policy-routing-on-openwrt/feed/ 0
IKEv2 on Windows Server 2012R2 https://archive.ntzyz.io/2016/04/22/ikev2-on-windows-server-2012r2/ https://archive.ntzyz.io/2016/04/22/ikev2-on-windows-server-2012r2/#respond Thu, 21 Apr 2016 16:01:04 +0000 https://blog.dimension.moe/?p=422 继续阅读IKEv2 on Windows Server 2012R2]]> .indent {text-indent: 2em;margin-top: 0.75em; margin-bottom: 0.75em;}

本文简单介绍了 Windows Server 平台上 IKEv2 VPN 的搭建,与 Windows/Linux 设备的访问。

在 Windows Server 上建立 PPTP VPN 服务

首先,通过远程桌面连接访问作为 VPN 服务器的 Windows Server,打开「服务器管理器」,点击「管理」菜单中的「添加与删除角色」,在「服务器角色」中,勾选「远程访问」。


继续向导,出现远程访问角色配置时,勾选「DirectAccess 和 VPN」。

DirectAccess-and-VPN-RAS

如果有其余选项,保持默认即可。随后就可以开始添加角色了。

完成之后,通知会提示 DirectAccess 和 VPN 需要配置,这里我们选择「仅 VPN」。

Deploy-VPN

随后打开「路由和远程访问」。该管理控制台可以在开始菜单的「管理工具」,或是「服务器管理器」中找到。

右击左侧的服务器名,点击「配置路由和远程访问」,在弹出的向导中,选择「自定义配置」,并勾选「远程访问(拨号或 VPN)」。

Custom-VPN-Configuration
VPN-Access

完成向导,如果有其他选项保持默认。这样我们就搭建好了一个最简单的 VPN 服务器。下面需要配置用户账户,以允许远程访问。

打开「计算机管理」,展开左侧「系统工具」中的「本地用户和组」,点击「用户」,右击右侧你想允许远程登录的用户账户,单击「属性」,在「拨入」选项卡中的网络访问权限里,选择「允许访问」。

如果需要为 VPN 连接分配静态地址池,你需要在「路由和远程访问」里打开服务器属性,在「IPv4」选项卡中,配置「IPv4 地址分配」。

通过以上步骤,你已经建立起一个简单可用的 VPN 服务器,你可以使用其他设备,配置一个 PPTP 协议的 VPN 连接,来测试是否可用。

使用 IKEv2 来代替 PPTP 作为 VPN 协议

与 PPTP/L2TP 相比,IKEv2 具有很多优点,详细的描述可以看这里:浅谈网络安全和 IKEV2 协议

IKEv2 需要一组证书来完成服务端与客户端之间的认证和加密。此外,按照连接方式,IKEv2 可能还需要连接发起方提供其他认证凭据。

由于窝死活摆不平微软爸爸的证书颁发角色,我选择了使用 strongSwan 提供的 ipsec pki 指令来生成证书。当然,使用 openssl 也是没有问题的。首先是生成一张 CA 证书,并签名。其中 C、O、CN 仅供参考:

ipsec pki --gen --outform pem > ca.pem
ipsec pki --self --in ca.pem --dn "C=CN, O=myvpn, CN=VPN CA" --ca --outform pem >ca.cert.pem

继续准备一份服务器证书。其中 CN 是 VPN 服务器的 IP 或域名,错误的 CN 将会导致连接被终止。该证书将被安装至 VPN 服务器:

ipsec pki --gen --outform pem > server.pem
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=myvpn, CN=123.123.123.123" --san="123.123.123.123" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem

如法炮制一份客户端证书,它将被安装到 VPN 客户端,即连接的发起方:

ipsec pki --gen --outform pem > client.pem
ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=myvpn, CN=VPN Client" --outform pem > client.cert.pem

将服务端证书与客户端证书转化为 p12 格式,就可以安装到 Windows 设备上了。以客户端证书为例:

openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "VPN CA"  -out client.cert.p12

这样我们就将得到一份加密信息拓展文件。安装证书步骤如下:

  开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。
  「文件」-「添加/删除管理单元」,添加「证书」单元
  证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。
  在左边的「控制台根节点」下选择「证书」-「个人」,然后选右边的「更多操作」-「所有任务」-「导入」打开证书导入窗口。
  选择刚才生成的 client.cert.p12 文件。下一步输入私钥密码。下一步「证书存储」选「个人」。
  导入成功后,把导入的 CA 证书剪切到「受信任的根证书颁发机构」的证书文件夹里面。
  打开剩下的那个私人证书,看一下有没有显示「您有一个与该证书对应的私钥」,以及「证书路径」下面是不是显示「该证书没有问题」。
  然后关闭 mmc,提示「将控制台设置存入控制台1吗」,选「否」即可。

完成证书的导入后,就可以使用 IKEv2 作为 VPN 协议进行远程访问了。

在 Linux 下远程登录到 VPN 服务器

Linux 环境下的拨入有两个实现的思路:使用 PPTP 协议或者使用 IKEv2 协议。

使用 PPTP 应该是不难的,很多 Linux 发行版的网络设置内就可以创建 PPTP 协议的连接,即使没有也可以用 pptpsetup 或是手写 peers 文件,然后用 pon 指令连接。然而因为 PPTP 本身的缺陷,有时候会遇到各种各样的问题导致无法使用,这时就可以转而使用 IKEv2。

可以说 Linux 最强大的 IPsec 实现就是 strongSwan 了,我们就将使用这个软件来进行 IKEv2 的拨入。首先你需要下载并解压 strongSwan 的源码:

wget https://download.strongswan.org/strongswan-5.4.0.tar.gz
tar xzvf strongswan-5.4.0.tar.gz && cd strongswan-5.4.0

配置软件并编译:

./configure --prefix=/usr \
    --sbindir=/usr/bin \
    --sysconfdir=/etc \
    --libexecdir=/usr/lib \
    --with-ipsecdir=/usr/lib/strongswan \
    --enable-md4 \
    --enable-sqlite \
    --enable-openssl --enable-curl \
    --enable-sql --enable-attr-sql \
    --enable-farp --enable-dhcp \
    --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-pseudonym \
    --enable-eap-simaka-reauth --enable-eap-identity --enable-eap-md5 \
    --enable-eap-gtc --enable-eap-aka --enable-eap-aka-3gpp2 \
    --enable-eap-mschapv2 --enable-eap-radius --enable-xauth-eap \
    --enable-ha --enable-vici --enable-swanctl --enable-systemd --enable-ext-auth \
    --disable-mysql --disable-ldap -enable-cmd --enable-forecast --enable-connmark \
    --enable-aesni --enable-eap-ttls --enable-radattr --enable-xauth-pam --enable-xauth-noauth \
    --enable-eap-dynamic --enable-eap-peap --enable-eap-tls --enable-chapoly --enable-unity \
    --with-capabilities=libcap
make -j4 && sudo make install

一个比较坑的地方是,虽然 Arch Linux 的 AUR Script 内启用了 EAP-MSCHAPV2,但是这个认证依赖于 md4,而这个特性并没有被启用,所以导致了无法使用 MSCHAPv2 进行身份验证。

完成安装后,就需要将可爱的证书们和客户端私钥配置好具体步骤:

    1. 将根证书复制到 /etc/ipsec.d/cacerts/ 目录下
    2. 将 CA 颁发的客户端证书复制到 /etc/ipsec.d/certs/
    3. 将 CA 颁发的客户端证书的私钥复制到 /etc/ipsec.d/private/

修改 /etc/ipsec.conf,添加一个 connection,我的配置是添加了一个叫 pv 的连接,你需要修改后面的 eap_identity, right 和 rightid 为自己的选项,rightsubnet 填写分配的静态地址网段:

# ipsec.conf - strongSwan IPsec configuration file

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    keyexchange=ikev2
    ike=aes256-sha1-modp1024!
    
conn pv
    left=%any
    leftfirewall=yes
    leftauth=eap-mschapv2
    leftsourceip=%config
    eap_identity=Administrator
    right=zh.ali.dimension.moe
    rightauth=pubkey
    rightid="C=CN, O=NTZYZ, CN=zh.ali.dimension.moe"
    rightsubnet=172.16.8.0/24
    auto=add

编辑 /etc/ipsec.secrets,内容为 EAP 身份验证时使用的凭据和私钥文件名:

# either of these two lines depending on leftauth above
: RSA 
 %any : EAP ""

这样我们就完成了基本的配置。连接到 VPN 只需要很简单的输入以下指令:

ipsec start
ipsec up pv

如果没有异常,命令执行完后的输出大致如图:

ipsec-up-pv

其他的一些维护

虽然 IKEv2 具有很多优点,但是还是有时会遭不住国内这样糟糕的互联网环境而被断开(但是比那个 PPTP 不知道高到哪里去了)

最简单的解决方案就是使用任务计划,Linux 下可以使用 crontab,Windows 则可以使用计算机管理提供的任务计划。对于 Linux,我们可以配置以下命令每两小时执行一次:

ipsec up pv

对于 Windows,我们可以准备这样的命令:

rasdial "VPN Connection"

参考链接:

1. HOW TO INSTALL VPN ON WINDOWS SERVER 2012 R2 | Thomas Maurer
2. UBUNTU、CENTOS搭建IPSEC/IKEV2 VPN服务器全攻略
3. 使用 Strongswan 架设 Ipsec VPN
4. strongSwan – Arch Wiki
5. AUR (en) – strongswan – Arch Linux

]]>
https://archive.ntzyz.io/2016/04/22/ikev2-on-windows-server-2012r2/feed/ 0
[L4D2] 在 Linux 上搭建一个 Left 4 Dead 2 游戏服务器 https://archive.ntzyz.io/2016/02/29/host-a-l4d2-server-on-linux-server/ https://archive.ntzyz.io/2016/02/29/host-a-l4d2-server-on-linux-server/#respond Mon, 29 Feb 2016 15:37:25 +0000 https://blog.dimension.moe/?p=363 继续阅读[L4D2] 在 Linux 上搭建一个 Left 4 Dead 2 游戏服务器]]> 讲真,搭服务器比玩游戏有意思多了(划掉

首先,你需要一个非 root 账户,这里不再多说,完全可以 Google 完成。后面的所有命令都是以普通用户执行的。

安装依赖:

sudo apt-get install -y lib32gcc1 libc6-i386

建立一个存放游戏的文件夹:

mkdir -p ~/l4d2/ && cd ~/l4d2/

然后是获取命令行版 steam 客户端,解压并执行:

wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh

以匿名方式登录 steam:

login anonymous

强制安装位置

force_install_dir ./gamedata/

开始下载:

app_update 222860 validate

完成后输入 exit 退出 SteamCMD,切换至游戏目录并编辑服务器配置:

nano ~/l4d2/gamedata/left4dead2/cfg/server.cfg

参考用配置文件:

hostname "Hostname"

rcon_password "YourOwnPasswordHere"

sv_steamgroup "YourOwnSteamGroupID"
sv_steamgroup_exclusive 0
sv_allow_lobby_connect_only 0

sv_region 255

然后,运行就可以了:

~/l4d2/gamedata/left4dead2/srcds_run -secure

之后,在游戏里打开开发者控制台,使用 connect IP 就能够连接上服务器了。

参考用配置文件中的「sv_steamgroup」可以用于将一个服务器设立为 Steam 组服务器,更加容易让玩家发现和连接。值得注意的是,此功能似乎并不能在国内的服务器上使用,如必须使用,请选择香港等墙外服务器。

如果官图玩腻了想试试非官方地图,直接将地图文件(*.vpk)复制到 ~/l4d2/gamedata/left4dead2/addons/ 目录下即可,使用 maps * 查看所有地图列表,并用 map name 加载地图。


附:Left 4 Dead 2 指令大全:
developer.valvesoftware.com

]]> https://archive.ntzyz.io/2016/02/29/host-a-l4d2-server-on-linux-server/feed/ 0 [ndless] ndless 4.0 环境搭建 https://archive.ntzyz.io/2016/02/18/set-up-the-ndless-development-environment/ https://archive.ntzyz.io/2016/02/18/set-up-the-ndless-development-environment/#respond Thu, 18 Feb 2016 08:11:19 +0000 https://blog.dimension.moe/?p=337 继续阅读[ndless] ndless 4.0 环境搭建]]> 机缘巧合之下,手里又多了个 Ti nspire CX CAS,系统版本为 3.1.0392,还是相当新的一台计算器。

说起来,自从高中毕业后,就没怎么折腾过计算器了。毕竟手机和电脑基本都是随时可用,再加上计算器的弱性能和繁琐的操作,逐渐的也就失去了兴趣。但是当这个计算器刚刚到手的时候,又不由得想搞着玩玩了(

ndless 和 nspire 的关系就不必再述了,具体可以前往 cncalc.org 上查找相关置顶贴,或者直接前往 ndless 的官网了解详情。

我的系统是 Ubuntu 15.10,其他发行版自行调整部分内容~首先是准备一下依赖:

sudo apt-get install git build-essential binutils libgmp-dev libmpfr-dev libmpc-dev libssl-dev libpython2.7-dev libboost-program-options-dev

如果编译过程中还出现了依赖相关的错误,缺啥装啥就是了(

再然后是下载源码:

git clone --recursive https://github.com/ndless-nspire/Ndless.git

完成之后,就可以开始编译 toolchain 了:

cd Ndless/ndless-sdk/toolchain/
./build_toolchain.sh

编译时间比较长,而且这个过程还蜜汁烧 U,之前还试图在 Cubieboard 4 CC-A80 上搭建环境的,结果负载飚到 32 然后彻底 GG 了(

完成之后,还要再编译 ndless 4.0:

cd ../..
make -j4

这次的快多了,很快就生成了相关文件。到此为止就顺利地完成了环境的搭建。下面就用 ndless sdk 自带的一个 sample 来测试测试:

cd Ndless/ndless-sdk/samples/freetype/
make clean
make

完成之后,就可以将目录下的 freetype_demo.tns 发送到计算器中,然后直接执行。如果没有什么意外,你会看到一个倾斜的 Droid Sans 字样。

顺便 nNovel Freetype 项目开坑,来补偿当年的各种遗憾。权且当作自娱自乐吧(

]]>
https://archive.ntzyz.io/2016/02/18/set-up-the-ndless-development-environment/feed/ 0
在 Linux 下利用 iptables 和 ss-redir 进行全局代理 https://archive.ntzyz.io/2016/01/27/proxy-under-linux-with-iptables-and-ss-redir/ https://archive.ntzyz.io/2016/01/27/proxy-under-linux-with-iptables-and-ss-redir/#comments Wed, 27 Jan 2016 14:00:37 +0000 https://blog.dimension.moe/?p=317 继续阅读在 Linux 下利用 iptables 和 ss-redir 进行全局代理]]> Windows 下使用 shadowsocks 实在是方便,绝大多数软件都会遵循 IE 代理,即使不愿意跟随 IE 的脚步,用户也可以使用 proxifity 这种软件来实现代理。然而 Linux 就是个坑了……
拿 Chrome 来举个栗子,当你在设置中点击更改代理服务器设置后,你会看到这些:

When running Google Chrome under a supported desktop environment, the system proxy settings will be used. However, either your system is not supported or there was a problem launching your system configuration.

But you can still configure via the command line. Please see man google-chrome-stable for more information on flags and environment variables.

Firefox 到还好一点,有图形化的内部代理设置,处理起来简单不少。
可是 apt-get 呢? wget 呢? git 呢? 即使这些程序支持使用命令来指定代理,但是仍然不是解决问题的最好方案,比如 w3m 就不支持 socks 代理 _(:з」∠)_

最好的解决方案就是直接对 Linux 强大的 iptables 动手脚了。借助 iptables 和 ss-redir,可以完美的实现对本机所有流量进行透明代理。

首先是编译安装 shadowsocks-libev:

sudo apt-get install build-essential git libssl-dev zlib1g-dev
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
./configure && make && sudo make install

完成之后,就顺利的装完了shadowsocks全家桶

然后就可以开始利用 iptables 将所有的流量转发到 ss-redir 所监听的端口上
1. 在 iptables 的 nat 表里面创建一个叫 SHADOWSOCKS 的链:

iptables -t nat -N SHADOWSOCKS

2. 在链中添加规则,防止出现递归式(?)的访问

iptables -t nat -A SHADOWSOCKS -d IP.ADDRESS.OF.SERVER -j RETURN

3. 然后是几个常见的内网网段,也是不需要代理的。这里只出现了我见过的内网网段,可能需要按情况修改:

iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN

4. 既然是全局代理,那么剩下的所有流量都直接转发到 ss-redir 所监听的端口了:

iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080
iptables -t nat -A OUTPUT -p tcp -j SHADOWSOCKS

5. 最后,执行 ss-redir:

ss-redir -s "IP.ADDRESS.OF.SERVER" -p PORT_OF_YOUR_SERVER -m ENCRYPT_METHORD -k "FUCK_GFW" -l 1080 -b 0.0.0.0

大功告成!

关于恢复 iptables,很简单,两句话就行了:

iptables -t nat -F
iptables -t nat -X SHADOWSOCKS

最后,如果需要绕行中国大陆流量,可以写这些:

iptables -t nat -A SHADOWSOCKS -d 8.8.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/254.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.0.0.0/255.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.0.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.0.12.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.1.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.192.60.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 14.192.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.0.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.50.40.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.98.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.98.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.99.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.102.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.106.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.106.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.109.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.112.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.112.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.113.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.115.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.116.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.121.64.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.121.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.128.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.131.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.144.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.160.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.192.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 27.224.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 36.0.0.0/255.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 39.0.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 39.64.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 39.128.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 42.0.0.0/255.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.0.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.128.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.140.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.152.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.208.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.216.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.232.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.239.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.239.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 49.244.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 54.222.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.14.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.16.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.32.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.65.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.66.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.68.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.82.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.87.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.99.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.100.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.116.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.128.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.144.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.154.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 58.192.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.0.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.151.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.154.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.172.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.191.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.191.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 59.192.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.0.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.48.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.63.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.160.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 60.192.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.4.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.4.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.8.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.28.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.45.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.45.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.47.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.48.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.87.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.128.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.232.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.236.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 61.240.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 91.234.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.0.0.0/255.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.0.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.1.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.50.56.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.53.100.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.55.224.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 101.110.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.1.8.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.1.20.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.1.24.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.1.72.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.1.80.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.1.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.2.104.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.2.144.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.2.164.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.2.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.3.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.3.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.4.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.4.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.5.32.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.5.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.5.252.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.6.72.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.6.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.7.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.7.24.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.7.212.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.7.216.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.52.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.200.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.8.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.9.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.9.248.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.10.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.10.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.10.80.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.10.110.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.10.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.11.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.12.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.12.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.12.136.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.12.184.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.12.232.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.13.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.13.144.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.13.196.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.13.240.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.14.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.14.112.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.14.128.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.14.156.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.14.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.15.4.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.15.8.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.15.16.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.15.96.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.15.200.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.16.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.16.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.17.40.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.17.120.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.17.160.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.17.200.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.17.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.18.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.18.224.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.19.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.19.40.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.19.64.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.19.232.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.20.12.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.20.32.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.20.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.20.128.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.20.160.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.20.248.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.21.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.21.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.21.208.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.21.240.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.22.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.22.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.22.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.23.8.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.23.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.23.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.23.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.128.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.144.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.220.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.228.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.24.240.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.25.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.25.64.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.25.148.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.25.152.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.25.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.26.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.26.64.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.26.156.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.26.160.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.26.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.27.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.27.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.27.96.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.27.176.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.27.208.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.27.240.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.28.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.28.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.29.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.29.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.29.136.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.30.20.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.30.96.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.30.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.30.200.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.30.216.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.30.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.64.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.72.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.144.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.160.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.31.200.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.16.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.32.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.72.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.84.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.124.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.152.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.160.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.240.240.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.72.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.88.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.96.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.160.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.241.216.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.242.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.242.64.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.242.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.242.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.242.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.242.240.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.243.24.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.243.136.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.243.248.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.16.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.56.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.64.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.80.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.144.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.232.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.244.240.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.245.20.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.245.48.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.245.60.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.245.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.245.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.246.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.246.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.246.128.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.246.152.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.247.168.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.247.176.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.247.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.64.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.96.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.152.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.160.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.192.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.208.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.248.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.249.12.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.249.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.249.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.249.192.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.249.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.250.32.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.250.104.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.250.124.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.250.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.250.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.32.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.80.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.96.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.120.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.160.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.200.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.251.240.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.252.24.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.252.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.252.64.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.252.96.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 103.252.168.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 106.0.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 106.192.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 110.0.0.0/254.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 110.93.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 110.232.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.66.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.67.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.68.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.91.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.235.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.235.156.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 111.235.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 112.0.0.0/248.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 112.137.48.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 113.52.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 114.198.240.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 115.124.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 115.166.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.66.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.89.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.90.80.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.90.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 116.95.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 117.104.160.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 118.102.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 118.102.32.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 119.63.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 119.82.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 119.232.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 119.235.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 120.0.0.0/252.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 120.88.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 120.136.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 120.137.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.0.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.100.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.101.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.101.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 121.200.192.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.102.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.102.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.128.120.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.200.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.201.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.248.24.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.248.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 122.255.64.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 123.108.128.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 123.108.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.0.0.0/255.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.40.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.40.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.42.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.47.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.108.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.108.40.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.109.96.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 124.147.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.31.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.32.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.58.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.60.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.62.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.64.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.168.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.171.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.208.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 125.254.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 134.196.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.0.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.128.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.148.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.155.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.156.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.170.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.176.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.183.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.186.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.188.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.192.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.224.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 139.226.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.75.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.143.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.205.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.206.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.210.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.224.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.237.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.240.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.243.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.246.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.249.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.250.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 140.255.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 144.0.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 144.6.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 144.12.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 144.52.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 144.122.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 144.255.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.0.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.115.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.121.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.122.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.138.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.223.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 150.254.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.0.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.3.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.34.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.36.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.96.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.100.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 153.118.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.0.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.18.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.61.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.122.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.148.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.156.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 157.255.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 159.226.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 161.207.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 162.105.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 163.0.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 163.125.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 163.142.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 163.177.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 163.178.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 163.204.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 166.110.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 167.139.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 168.160.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 171.8.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 171.32.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 171.80.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 171.96.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 171.208.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 175.0.0.0/255.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 175.102.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 175.106.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.64.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.128.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.148.16.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.148.152.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.148.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.148.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.149.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.150.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.189.144.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.200.252.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.201.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.202.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.208.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.210.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.212.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.222.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.223.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.233.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.233.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 180.235.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.0.0.0/254.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.23.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.23.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.160.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 182.174.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 183.78.176.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 183.182.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.124.154.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 192.188.168.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.0.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.0.176.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.3.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.4.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.4.252.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.6.4.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.6.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.6.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.8.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.8.24.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.8.64.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.8.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.8.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.9.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.10.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.12.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.12.16.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.12.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.14.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.20.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.20.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.21.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.22.248.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.27.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.36.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.15.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.135.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.136.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.140.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.143.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.144.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.150.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.155.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.156.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.158.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.40.162.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.41.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.43.72.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.43.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.44.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.45.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.45.15.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.45.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.46.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.47.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.47.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.57.240.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.58.0.0/255.255.255.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.59.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.59.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.59.232.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.59.236.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.60.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.60.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.60.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.62.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.62.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.63.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.63.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.63.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.65.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.67.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.69.4.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.69.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.70.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.70.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.72.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.72.80.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.73.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.74.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.74.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.74.254.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.75.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.75.240.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.76.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.77.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.78.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.79.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.79.248.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.80.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.81.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.83.248.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.84.4.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.84.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.84.24.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.85.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.86.248.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.87.80.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.89.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.90.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.90.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.90.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.90.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.91.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.91.96.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.91.128.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.91.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.91.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.92.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.92.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.93.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.93.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.94.92.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.95.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.95.240.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.95.252.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.96.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.112.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.120.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.122.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.122.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.122.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.122.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.122.128.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.123.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.124.16.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.124.24.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.125.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.125.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.127.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.130.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.130.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.131.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.131.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.131.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.133.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.134.56.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.134.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.136.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.137.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.141.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.142.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.143.4.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.143.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.143.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.146.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.146.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.147.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.148.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.152.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.153.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.153.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.157.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.158.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.160.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.162.64.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.164.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.164.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.165.96.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.165.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.165.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.166.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.168.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.170.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.170.216.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.170.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.171.216.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.171.232.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.172.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.173.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.173.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.173.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.174.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.176.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.179.240.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.180.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.180.208.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.181.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.182.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.182.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.189.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.189.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.189.184.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.191.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.191.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 202.192.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.0.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.76.160.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.76.168.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.77.176.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.78.48.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.79.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.79.32.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.80.4.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.80.32.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.80.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.81.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.81.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.82.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.82.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.83.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.83.224.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.86.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.86.254.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.88.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.99.8.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.99.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.99.80.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.100.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.100.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.104.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.105.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.105.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.106.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.110.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.110.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.110.232.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.114.240.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.116.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.128.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.129.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.130.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.132.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.134.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.135.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.135.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.142.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.144.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.145.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.148.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.148.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.149.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.152.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.152.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.153.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.156.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.160.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.160.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.161.0.0/255.255.252.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.161.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.161.192.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.166.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.168.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.170.56.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.171.0.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.171.224.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.174.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.174.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.175.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.176.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.176.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.176.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.184.64.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.187.160.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.189.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.189.112.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.189.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.190.96.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.190.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.191.0.0/255.255.254.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.191.16.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.191.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.191.144.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.192.0.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.193.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.194.96.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.195.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.196.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.202.232.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.204.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.208.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.209.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.212.0.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.212.64.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.215.232.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.222.192.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.223.0.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 203.223.16.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.0.0.0/255.192.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.2.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.5.0.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.5.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.56.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.64.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.82.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.87.128.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.185.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 210.192.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 211.64.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 211.96.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 211.128.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.0.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.185.192.0/255.255.192.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.192.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.240.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 218.248.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.72.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.80.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.128.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.216.0.0/255.248.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 219.224.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.101.0.0/255.255.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.112.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.152.128.0/255.255.128.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.154.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.160.0.0/255.224.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.192.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.224.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.242.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.247.128.0/255.255.224.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.248.0.0/255.252.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 220.252.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 221.0.0.0/255.240.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 221.122.0.0/255.254.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 221.128.0.0/255.128.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 222.0.0.0/254.0.0.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 223.27.184.0/255.255.248.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 223.223.176.0/255.255.240.0 -j RETURN
iptables -t nat -A SHADOWSOCKS -d 223.223.192.0/255.255.240.0 -j RETURN
]]>
https://archive.ntzyz.io/2016/01/27/proxy-under-linux-with-iptables-and-ss-redir/feed/ 4