跳到内容

文章类别:Linux

国产派:NanoPi NEO 上手试玩

因为平时有需要在国内范围,使用混淆流量穿透某些管控设备,非飜蘠,需要在Linux设备上搭建酸酸乳服务器,客户端通过混淆穿透设备连接到有Internet访问权限的酸酸乳之后就可以“自由”上网。

其实这是我在无意间发现的,酸酸乳除了科学上网之外在国内也有一定的应用场景,后面在详细说我的应用,先介绍一下本文主角:NanoPi。

不需要树莓派一样高昂的价格(相对),jack 马家几十元就能入手一款国产派,例如NanoPi、OrangePi等,但却又有不输树莓派的性能配置和扩展能力,当然周边资料比起大名鼎鼎的树莓派还是要差上一些。

买回来是散的,自己把壳子、散热和板子装起来,就下面这样,明显的接口有百兆网口、USB母头、MicroUSB供电口、用作存储的SD卡槽,还有两排插针可以扩展其他接口,用不到不折腾了:

包装非常硬朗,说明书有基本的SD卡镜像制作步骤,中英两种说明书,图中只给中文的;

从网站下载镜像,用Win32DiskImager写入到SD卡里面,插到板子上接上MicroUSB系统就启动了,蓝灯稳定闪烁说明系统启动完毕,以后就是下面这样了,一边一根线:

大致就是这样,配置参数就不细说了,网上都有,下面说说我是怎么应用的。仅使用了板子上的Linux,没有搞那些外围设备的开发。

从路由器找到IP然后连上去:

官方镜像自带监控工具,可以看出来镜像就是从树莓派改的:

偷懒,在NanoPi上用一键脚本安装酸酸乳服务端用来转发,需要从Github下载libsodium-1.0.15.tar.gz,无法访问,脚本报错,僵,

看到执行目录里面有个0kb的libsodium-1.0.15.tar.gz文件,手动从网上下载了scp放进来再运行脚本,安装通过了。

接下来配置网络,接入的网络环境是这样的:

入户一个主路由,网件电磁炉r6300v2,洋垃圾刷梅林,192.168.192.0段,

主路由下面有一个副路由,网件r3700v4,刷OpenWRT,192.168.168.0段,

NanoPi接在副路由上。

主路由联通拨号有公网IP但是不固定,使用梅林的动态DNS功能,绑定到一个域名上,这里用的是公云的免费DDNS,这样在公网就可以从一个固定的域名访问到主路由:

然后在主路由做端口转发到副路由,用到的几个端口都转发一下吧,后期稳定了只留酸酸乳端口:

然后在副路由做端口转发到NanoPi,用到的几个端口都转发一下吧,后期稳定了只留酸酸乳端口:

OpenWRT做端口转发可能还是无法访问,需要在防火墙那里设置一下,具体请上网查。

然后telnet一下域名能通了,再试一下酸酸乳服务也是好的,这样就能用了。

平时是这样用的,在某组织内,有某设备设置的网络限制,仅允许白名单域名通过访问,在酸酸乳客户端将流量混淆成白名单内的域名,就可以穿透限制连接到酸酸乳服务端上,再由服务端转发就可以自由上网(仅国内)。

酸酸乳服务器要搭在能访问公网的Linux上,本来想用废旧的安卓手机装一个Linux,但是试了好多在Android上部署Linux的应用,都是虚拟机形式的,或者被chroot了,无法处理来自网络的链接请求,也可能是我不会设置,欢迎在评论中讨论。又想到在Windows的Hyper-V中建一个Linux虚拟机,这是可行的,但是要一直开着电脑。也想过在国内买一个云服务器,不过价格都很贵,虽然自己有在国外的VPS,由于是低端机型而且跨国,那个的访问速度就很慢了。然后就想到了在树莓派中安装Linux,不过树莓派的高价格来的各种可扩展性和其他各方面的特性都是我不需要的,买个树莓派来有点浪费了,再找树莓派最低端型号的时候发现了国产派,稍微比较之后选择了友善之臂的NanoPi NEO。

大致就是这样,EOF。

CentOS编译小飞机R(粉色界面改颜色)

应小伙伴要求给小飞机R改个颜色,从来没搞过,撸起袖子干。

主机为Win10,使用自带的Hyper-V虚拟机,建立二带虚拟机据说性能好一些,关闭安全启动不然无法从ISO文件启动,虚拟机中最小安装,安装CentOS-7-x86_64-Minimal-1611,CentOS具体安装步骤不详细说明,因为我是最小安装,你们照我这篇来搞应该不会缺失什么库之类的,装完更新一下系统:

yum install epel-release -y
yum update -y
yum upgrade -y

安装jdk 1.8.0:

yum install java-1.8.0-openjdk.x86_64
yum install java-1.8.0-openjdk-devel.x86_64

配置java环境变量,在/etc/profile 尾部追加:

#set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

应用环境变量:

source /etc/profile

然后运行一下java和javac看看有输出不报错就可以了,自己新建一个目录,把小飞机R源码从github上拖下来:

git clone https://github.com/小飞机R/小飞机R-android.git

拖下来之后进到目录里面下载一下依赖库:

git submodule update --init

下载如果出错则虚拟机需要出墙,再把ssr客户端的源码拖下来:

git clone https://github.com/小飞机R/小飞机R.git

配置什么的不说了,见这里:

https://github.com/小飞机R/小飞机R/tree/manyuser

如果使用chacha20,报错提示“install python-setuptools”,还要安装libsodium:

yum install libsodium

完事还是不行,报错提示“ImportError: No module named cymysql”,还要安装cymysql:

pip install cymysql

完事还是不行,提示报错“pip: command not found”,还要安装pip:

easy_install pip

完事还是不行,提示报错“easy_install: command not found”,还要安装python-setuptools:

yum install python-setuptools

然后再把上边重复一遍就好了,如果还报错“Can’t connect to MySQL server on u’127.0.0.1′ (111)”,那是你用成数据库版了,进子目录运行单用户版。

这里需要从墙外获取文件,下载如果出错需要出墙, git自带了sock5代理功能,由于我是在虚拟机上建的CentOS,然后我再主机上有SSR,我在主机的SSR上打开本地代理,允许来自局域网的链接,直接给虚拟机使用就行了,不用在虚拟机中单独配置一个SSR,懒得配主机防火墙规则了,直接关闭Windows防火墙,反正下载完就不用了,再把防火墙打开:

git config --global http.proxy 'socks5://主机IP:1080'
git config --global https.proxy 'socks5://主机IP:1080'

顺道把CentOS的防火墙也关了:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

配置SBT 0.13:

curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
mv bintray-sbt-rpm.repo /etc/yum.repos.d/
yum install sbt

第一次运行sbt超慢,卡在“Getting org.scala-sbt sbt 0.13.13 …”,看日志其实后台在下载东西:

tail -f $HOME/.sbt/boot/update.log

关于这一段,我在网上看到解决方案的时候直接喷了:

This is quite old post and my answer may not be completely relevant. But here is my experience:

  1. I am using sbt 0.13.8
  2. Getting org.scala-sbt sbt 0.13.8 …
  3. I have got this line hanging for some time – between 5 to 10 minutes.
  4. And then it started to download stuff.

So my solution is that you have to wait a bit.

下面的回复也超搞笑:

Thanks! I was “waiting” while looking up the problem and reading this page. Now I checked the window again, and it’s downloading all the jars… sloooowwwlllyyyy 🙂

等了快半个钟终于有反应了……

然后下载android SDK 25,使用curl加代理:

curl -x sock5://主机IP:1080 -O https://dl.google.com/android/repository/tools_r25.2.3-linux.zip

然后配置sdk环境变量,在/etc/profile 尾部追加:

#set android environment
ANDROID_HOME=/root/android_home
PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
export ANDROID_HOME PATH

使之生效:

source /etc/profile

更新sdk:

android update sdk --no-ui

更新的同时不闲着,下载配置ndk和一些运行库:

yum install -y glibc.i686 zlib.i686 libstdc++.i686
curl -x sock5://主机IP:1080 -O https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip

然后配置ndk环境变量,在/etc/profile 尾部追加:

ANDROID_NDK_HOME=/root/android_home/android-ndk-r13b
export ANDROID_NDK_HOME

使之生效:

source /etc/profile

然后生成自己的key:

keytool -genkey -v -keystore xxxx.jks -keyalg RSA -keysize 2048 -validity 10000 -alias xxxx

剩下的根据github上的说明进行操作,前面有些设置环境变量或者文件位置目录的,你们根据自己的进行设置。

git submodule update –init

# Build native binaries
./build.sh

# Build the apk
sbt clean android:package-release

【尼玛,我博客不会因为这篇给墙了吧】

让命令后台运行并在前后台切换

在命令结尾加”&”符号可以让命令在后台运行,

这时可以看到一个命令号和命令,后面是Running,表示正在运行,

输入fg即可将后台命令调回前台,

但如果有多个命令在后台运行,就需要jobs命令,

jobs命令可以列出所有在后台运行的命令及运行状态,

这时使用fg空格后接命令号即可将对应的命令调回前台,

如果一个命令已经在前台运行,又不想结束他,

按Ctrl+Z即可将命令移至后台,

但这是可以看到该命令的状态是Stopped,

这时可以使用bg空格后接命令号将命令置于Runing状态.

上面的方法虽然可以让命令在后台运行,

但是退出登录或者关闭终端,后台的命令也会结束,

如果不想让命令结束就需要nohup了,

在退出后仍想继续运行的命令前面加上nohop空格借命令即可.

挂载NTFS文件系统与设置开机自动挂载

虽然大部分Linux已经可以自动挂载NTFS分区,还是有一些不能自动挂载,

一种简单的解决方法是使用开源软件ntfs-3g

使用下列命令安装ntfs-3g

yum install ntfs-3g

然后用下面的命令可以查看分区信息

fdisk -l

然后使用下面的命令即可挂载:

mount -t ntfs-3g /dev/你的分区 /你想挂载到的目录

建议将分区挂载到/mnt下面

至于自动挂载,可以修改/etc/fstab文件,

在下面按如下格式添加想要自动挂载的分区,每行一个分区,

/dev/你的分区 /mnt/你的目录 ntfs-3g defaults 0 0

更详细参数可以参考man手册

如不进行设置,详细挂载参数使用下面的命令查看:

less /proc/mounts

在CentOS上安装Nvidia显卡驱动

最近忙着投简历,文章更新落下了,补几篇吧

在比较新的版本上安装英伟达驱动时会提示下面的错误:

“ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver, and must be disabled before proceeding. Please consult the NVIDIA driver README and your Linux distribution’s documentation for details on how to correctly disable the Nouveau kernel driver.”

Nouveau是一个开源项目用来替代Nvidia的驱动,通用行好一些,性能方面自然还是Nvidia好一些.

因为要重做内核,我们需要安装必须的工具:

yum groupinstall "Development Tools"

下面的dkms包可以避免每次升级内核都要重新安装Nvidia驱动,

yum install kernel-devel kernel-headers dkms

使用下面的命令获取显卡型号:

lspci | grep VGA

到下面的网址下载驱动:

http://www.nvidia.com/Download/index.aspx

然后将下面的语句加入到 /etc/modprobe.d/blacklist.conf 中

blacklist nouveau

然后执行下面的命令

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -v /boot/initramfs-$(uname -r).img $(uname -r)

然后运行下面的命令,关闭Xwindow进入命令行界面,安装Nvidia驱动,

(请您看完本文再执行命令,因为您一旦执行就无法再回到这里看接下来的命令,除非您再次启动Xwindow)

sbin/init 3

亲测