1
0
mirror of https://github.com/QSCTech/zjunet.git synced 2026-01-22 11:44:48 +08:00

Compare commits

..

112 Commits

Author SHA1 Message Date
Azuk 443
ff6ed1ab75
deprecate WLAN function 2023-12-21 15:39:53 +08:00
Azuk
89810b80c9
bump version number to 0.3.3-6 2023-10-16 12:40:49 +08:00
Azuk
7bd9e67936
force using xz compression in debian package 2023-10-16 12:40:13 +08:00
Azuk 443
cfd6c16f60 Update .gitlab-ci.yml file 2023-10-16 04:33:40 +00:00
Azuk 443
9b7f791fd4
Merge pull request #90 from Mythologyli/master
Add subnet in route
2023-10-16 12:28:26 +08:00
Azuk 443
0e5b349cfb
Merge pull request #91 from xietianxi/master
replace deprecated apt-key in setup instructions
2023-10-16 12:26:41 +08:00
xietianxi
e46b04691a replace deprecated apt-key in setup instructions 2023-10-16 11:05:33 +08:00
51240ecc87
Add subnet in route 2023-10-13 14:42:57 +08:00
Azuk 443
d601644df2
bump version to 0.3.3-5 2023-10-12 18:58:56 +08:00
Azuk 443
9b02ca93eb
changed maintainer & installation sources 2023-10-12 18:53:52 +08:00
Azuk 443
426663b9c1
remove qsc download site and public key 2023-10-12 18:48:47 +08:00
Long0x0
51ae7a6ceb
Add compatibility for ppp version 2.5.0 (#89)
Co-authored-by: long <gmchenlong@gmail.com>
2023-10-08 01:27:06 +08:00
Azuk 443
3316d0fa01
Merge pull request #87 from determ1ne/master
Fix ZJU mirror repository setup instructions
2023-02-24 15:19:38 +08:00
Azuk 443
2bfab862d5
fix ZJU mirror repository setup instructions 2023-02-24 15:15:36 +08:00
Wu Yufei
0b789525d1
Bump version 2022-03-29 05:18:38 +08:00
Wu Yufei
e59b4d96db
更新到浙大源的链接 2022-03-29 05:18:22 +08:00
NyancoChan
acf3e2a1e2
Merge pull request #77 from Nayaco/master
Fix bug for wlan script
2020-11-29 14:44:05 +08:00
nyancochan
18f55d6120 Fix bug for wlan script 2020-11-29 14:42:52 +08:00
Wu Yufei
195210365e
Add description for Arch Linux 2020-11-13 03:32:18 +08:00
Wu Yufei
e531ed2f97
Add issue template 2020-11-13 03:24:47 +08:00
Wu Yufei
f8ca63933e
Fix typo in maintainer name 2020-11-13 02:22:01 +08:00
Wu Yufei
a587c43bd1
Bump version 2020-11-13 01:53:10 +08:00
Wu Yufei
731be425a6
Add PKGBUILD generation script 2020-11-13 01:52:49 +08:00
Wu Yufei
6c635487a2
Fix uninstall code & Add python3 workaround for changelog.py 2020-11-13 01:24:50 +08:00
Wu Yufei
fce9e2a69d
Add legacy standalone python support in changelog.py 2020-11-13 00:48:01 +08:00
Wu Yufei
fc48eff092
Fix bugs in packaging workflow 2020-11-12 23:59:46 +08:00
Wu Yufei
887de1b822
Modify workflow condition 2020-11-12 23:50:07 +08:00
Wu Yufei
701a17a1e2
Add CI support (#76) 2020-11-12 23:40:37 +08:00
Wu Yufei
2fa9b0a1e8
Update github actions 2020-11-12 21:21:40 +08:00
Wu Yufei
f179d6817f
Bump version 2020-11-12 20:39:12 +08:00
Wu Yufei
d8c9413580
Create packaging.yml 2020-11-12 20:36:45 +08:00
Wu Yufei
b446175d51
Update install/uninstall script 2020-11-12 20:21:35 +08:00
Wu Yufei
c44a4105d4
Update building scripts 2020-11-12 19:46:10 +08:00
Wu Yufei
a294ecaed0
Bump version 2020-11-12 08:53:11 +08:00
Wu Yufei
69a1633e8a
Upgrade deprecated xl2tpd-control calling 2020-11-12 08:41:18 +08:00
杨子晗
17d91a4157 add solution for 'error: no such command' 2020-11-02 17:13:22 +08:00
Wu Yufei
9c4ca315ce
Merge pull request #74 from dinoallo/master
wlan.sh: remove some possible bashisms in lib/wlan.sh
2020-05-26 15:09:50 +08:00
Allo
6747ef8c4a wlan.sh: remove some possible bashisms in lib/wlan.sh
The shebang line specifies that executing the script using Bourne shell while
some of the code uses possible bashisms like "[[" instead of "[" and "==" instead of "=".
If a user's /bin/sh is linked to other shells like "dash, ksh, etc...",
it might cause an issue for using the program.
2020-04-11 23:47:41 +08:00
Wu Yufei
d5bf090f4b
Bump version 2019-08-30 23:27:00 +08:00
Wu Yufei
8f0095c8fe
Update README and add disable WLAN function 2019-08-30 23:18:52 +08:00
Wu Yufei
2576d68dd0
Update maintainer information 2019-08-22 08:37:05 +08:00
Wu Yufei
c3f67f4692
Fix several bugs 2019-08-12 17:58:43 +08:00
Wu Yufei
6e3ee5d8bb
Update README.md 2019-06-26 18:23:02 +08:00
Wu Yufei
dad2e3ecd5
Bump version 2019-06-04 17:50:10 +08:00
Wu Yufei
f10b11227e
Update README and update build system 2019-06-04 17:47:11 +08:00
Zhang Sen
781f6d53bd
[Fix] remove useless comments. 2019-06-01 16:40:02 +08:00
Ray Xu
4ddf258160
Merge pull request #69 from wfwf1997/master
Route and MTU bug fix
2019-03-28 16:55:44 +08:00
Mark Wu
3b55503c9e fix mtu problem 2019-03-28 10:03:35 +08:00
Mark Wu
a71c73f0b6 add a new VPN server, fix route setting problem 2019-03-28 10:00:37 +08:00
Senorsen
2b2a115530 Bump version 2018-12-09 15:41:12 +08:00
Zhang Sen
c904e7b4e9
Merge pull request #67 from QSCTech/fix-read-user-password
Fix: read user password
2018-12-09 15:39:28 +08:00
Zhang Sen
5a4a9dd447
Fix: read user password 2018-12-09 15:39:12 +08:00
Zhang Sen
88eb1ae76a Update VERSION 2017-05-20 01:15:41 +08:00
Zhang Sen
1f164325e9 Merge pull request #62 from QSCTech/revert-60-noecho-pw
Revert "disabled password echoing"
2017-05-20 01:12:53 +08:00
Zhang Sen
b00e7eb0cc Revert "disabled password echoing" 2017-05-20 01:12:44 +08:00
Zhang Sen
874aa34ddd Merge pull request #61 from wfwf1997/master
fix outdated wlan script
2017-05-20 01:11:15 +08:00
wfwf1997
9754ff1d66 fix outdated wlan script 2017-03-24 21:49:17 +08:00
Zhang Sen
0a0d021e5f 0.3.0 2017-03-16 23:41:26 +08:00
Zeno Zeng
c0ed2005bd Merge pull request #60 from yejingchen/noecho-pw
disabled password echoing
2017-03-16 22:20:01 +08:00
Ye Jingchen
dba5a57ac0 added a newline after password's been received 2017-03-16 20:41:58 +08:00
Ye Jingchen
2e6992d954 disabled password echoing 2017-03-16 20:40:29 +08:00
Ye Jingchen
2fa0536743 disabled password echoing 2017-03-16 20:01:04 +08:00
Senorsen
794113d7f2 remove 10.171.* fixed #56 2016-05-17 09:18:31 +08:00
Senorsen
29ae0561f3 Fix #57 2016-05-17 09:15:20 +08:00
Senorsen
f7d70fc5dd Enable customized dns server option 2015-06-30 00:22:41 +08:00
Senorsen
e00192add6 Update for a mistake 2015-06-28 20:27:33 +08:00
Senorsen
0a1fc71944 Bump version to 0.2.5 with a few changes 2015-06-28 20:19:12 +08:00
Zhang Sen
eac29e8bc4 Merge pull request #53 from variousvirgil/patch-1
fix typo
2015-04-05 07:59:00 +08:00
variousvirgil
371fa9323a fix typo 2015-04-05 07:52:03 +08:00
Senorsen
bd13094e67 Merge branch 'master' of https://github.com/QSCTech/zjunet 2015-02-09 11:12:45 +08:00
Senorsen
0ba55b0593 Bump release 2015-02-09 11:12:14 +08:00
Senorsen
ea2e77a4f9 Merge branch 'master' of github.com:QSCTech/zjunet 2015-02-09 09:09:49 +08:00
Senorsen
1d189dee13 Fixed warning during installation on Fedora 2015-02-09 09:09:15 +08:00
Senorsen
a4b4e82907 Merge branch 'master' of https://github.com/QSCTech/zjunet 2015-02-09 00:44:45 +08:00
Senorsen
fbbdec2ced Fix rpm package bug: break --version 2015-02-09 00:43:32 +08:00
Senorsen
6c9f18e4ec rpm: import 2015-02-08 23:21:38 +08:00
Senorsen
92e4f60ea2 Yum: no need to update 2015-02-08 23:20:50 +08:00
Senorsen
818d8fed52 Update README.md for rpm repo 2015-02-08 23:19:16 +08:00
Senorsen
e8eb8c1530 Fix build problem 2015-02-08 23:01:01 +08:00
Senorsen
a423aba8f1 Display rpm 2015-02-08 22:56:20 +08:00
Senorsen
03836b3a97 Oops I should not break the others 2015-02-08 22:55:33 +08:00
Senorsen
1e84afc66e Modified rpm repo metadata expire time 2015-02-08 22:44:59 +08:00
Senorsen
70af9fc900 Fix Description 2015-02-08 22:41:00 +08:00
Senorsen
3daa7163e9 Fixed several bugs in rpm package 2015-02-08 22:35:28 +08:00
Senorsen
1ede8b984f RPM package done! (rpmbuild and fakeroot needed) 2015-02-08 22:20:12 +08:00
Senorsen
e9f1d1598b Uses https 2015-02-08 20:37:08 +08:00
Senorsen
52befaea3f Oops fixed the script 2015-02-08 20:29:28 +08:00
Senorsen
687fb73e41 Update README.md 2015-02-08 20:28:10 +08:00
Senorsen
533f6fb82a Uses a more stable test IP 2015-02-08 20:03:37 +08:00
Senorsen
5e28d08fcf Should use fakeroot, in case of wrong uid 2015-02-08 19:16:55 +08:00
Zeno Zeng
6a58107239 Merge pull request #51 from zjusbo/master
update logout() function to meet current website configuration. Previous...
2015-01-24 19:51:17 +08:00
songbo
257a06a5d1 update logout() function to meet current website configuration. Previous version can not logout successfully. 2015-01-24 16:40:53 +08:00
Zeno Zeng
e423f6a6f8 pkill xl2tpd-control before using xl2tpd-control, fixes #47 2014-11-22 17:56:03 +08:00
Zeno Zeng
5c387ad192 bump version to 0.2.3 2014-11-22 17:42:31 +08:00
Zeno Zeng
8b6cfbf6b2 add disconnect back 2014-11-22 17:37:43 +08:00
Zeno Zeng
e1c3bf4375 use lib/version 2014-11-22 17:21:09 +08:00
Zeno Zeng
e42e7f7a3a connect now won't disconnect by default 2014-11-22 16:55:49 +08:00
Zeno Zeng
088248ed5c update logs 2014-11-22 16:54:34 +08:00
Senorsen
0d30f95dec bump to version 0.2.2 2014-11-22 13:24:18 +08:00
Senorsen
e77bb0dcd3 添加最近对VPN服务器变化的支持;修正注释 2014-11-12 21:16:12 +08:00
Zeno Zeng
db137857de update README 2014-11-12 20:30:00 +08:00
Zeno Zeng
0feb03327e bump version to 0.2.1 2014-11-12 20:23:39 +08:00
Zeno Zeng
aea4dfc552 update README 2014-11-12 20:22:49 +08:00
Xero Essential
a97dfe0b4b 剁手~! 2014-11-12 18:35:21 +08:00
Zeno Zeng
116266a137 Merge pull request #44 from chaosink/master
user.sh的用户名过滤
2014-10-24 13:03:15 +08:00
chaosink
cdbec2435a user.sh的用户名过滤
etc/xl2tpd/xl2tpd.conf文件中可能会有其他软件留下的账户名,在我的电脑上就有"[lac zjuvpn]",用grep 'lac zju-l2tp-'将他们过滤掉。
2014-10-24 12:26:32 +08:00
Zeno Zeng
824dcc35ad bump version to 0.2.0 2014-10-15 16:39:00 +08:00
Zeno Zeng
43d6e39757 wlan.sh now uses xl2tpd.conf 2014-10-15 16:35:07 +08:00
Zeno Zeng
28f310e4b1 use xl2tpd.conf, abandon .zjunet/ 2014-10-15 16:24:20 +08:00
Zeno Zeng
2536ecd32e setup route after wlan 2014-10-15 15:24:31 +08:00
Zeno Zeng
e837d16e7d ip route flush cache 2014-10-14 17:27:22 +08:00
Zeno Zeng
d28637fc38 sleep 5 before reconnect (for kicking off) 2014-10-14 15:35:05 +08:00
27 changed files with 879 additions and 267 deletions

32
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,32 @@
---
name: Bug report
about: Create a bug report to help us locate problems
title: ''
labels: bug
assignees: ''
---
## Environment
Please complete the following information:
- **OS:** [OS name and version, e.g. Ubuntu 20.10, CentOS 8]
- **zjunet:** [output of `zjunet -v`, e.g. 0.3.3-3]
- **xl2tpd:** [output of `xl2tpd -v`, e.g. 1.3.16]
- **network type:** [wired or wireless or ...]
- other softwares or the network condition that may related to this bug
## Bug description
A clear and concise description of what the bug is and how to reproduce it.
## Output
Full output of command line tools.
If applicable, add screenshots to help explain the problem.
```
[user@host ~]# zjunet XXXX
...
```
## Notes
Add other information that may related to this bug.

View File

@ -0,0 +1,14 @@
---
name: Feature request
about: Suggest a new idea for this project
title: ''
labels: feature
assignees: ''
---
## Description
A brief explanation of the feature.
## Motivation
Why such feature is worthy? What use cases does it support?

38
.github/workflows/packaging.yml vendored Normal file
View File

@ -0,0 +1,38 @@
# This workflow build packages for release
name: Packaging
# Controls when the action will run. Triggers the workflow when releases created or modified
on:
create:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: '^3.7' # request python 3.7+ for datetime.datetime.fromisoformat
- name: Build Packages
env:
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
run: |
python -m pip install --upgrade pip
python -m pip install urllib3
cd build
./build.sh
- name: Archive Packages
uses: actions/upload-artifact@v2
with:
name: Release Packages
path: |
build/debian/zjunet_*.deb
build/rpm/zjunet-*.rpm
build/openwrt/zjunet_*.opk

13
.gitignore vendored
View File

@ -1,2 +1,13 @@
# Packages
*.deb *.deb
*.opk *.opk
*.rpm
# Rubbish
*.swp
build/debian/debian
build/rpm/zjunet-*
build/rpm/zjunet.spec
build/openwrt/debian

23
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,23 @@
image: ubuntu:jammy
stages:
- build
compile:
stage: build
only:
- tags
script:
- sed -i 's|http.*.ubuntu.com|http://mirrors.zju.edu.cn|' /etc/apt/sources.list
- apt-get update && apt-get -y --no-install-recommends install ca-certificates build-essential fakeroot git dpkg-dev rpm python3 python-is-python3 python3-urllib3
- mkdir artifacts
- pushd build
- ./build.sh
- popd
- cp build/debian/*.deb artifacts/
- cp build/openwrt/*.opk artifacts/
- cp build/rpm/*.rpm artifacts/
artifacts:
paths:
- /artifacts

127
README.md
View File

@ -1,94 +1,149 @@
# zjunet # zjunet
[查看中文README](README.zh.md)
Command Line Scripts for ZJU (VPN / WLAN / DNS) Command Line Scripts for ZJU (VPN / WLAN / DNS)
## Features ## Features
- ZJU VPN (l2tp) - ZJU VPN (l2tp)
- ZJU WLAN - ZJUWLAN
- 路由器支持written in Bourne Shell - Router support
- 多拨支持(多账户负载均衡) - Overlap network dialing (with load balance)
- ZJUWLAN 与 ZJUVPN 带宽叠加1 WLAN + N VPN在 ZJUWLAN 下) - Overlap bandwidth of ZJUWLAN and ZJU VPN (1 WLAN + N VPN, Using ZJUWLAN)
- DNS 自动测试设置(适用于 DNS 坏掉的情况) - Automatic DNS setting (in case DNS do not work)
## Requirements ## Requirements
- xl2tpd - xl2tpd
- curl - `dig` (Different package on different platform)
## Install ## Installation
### Debian / Ubuntu If you meet any problem during or after the installation, check Troubleshooting section below in this documentation.
https://github.com/QSCTech/zjunet/releases ### Debian / Ubuntu (deb)
下载 deb双击安装就是。
### Openwrt 1. Configure ZJU mirrors from manual. [Ubuntu](https://mirror.zju.edu.cn/docs/ubuntu/)/[Debian](https://mirror.zju.edu.cn/docs/debian/)
2. Run these command.
https://github.com/QSCTech/zjunet/releases ``` bash
下载 opk然后 `opkg install` 就是。 curl https://mirrors.zju.edu.cn/openzjunet/zjumirrors.pgp | sudo tee /etc/apt/trusted.gpg.d/zjumirrors.asc
curl https://mirrors.zju.edu.cn/openzjunet/zjunet.list | sudo tee /etc/apt/sources.list.d/zjunet.list
sudo apt-get update
sudo apt-get install zjunet
```
### From source 3. The installation has completed.
4. If you are setting up a server, we suggest you run `zjunet wlan disable` to disable WLAN capability.
一般来说 master 分支是稳定的dev 分支会有破坏性变更。 ### Fedora / CentOS (rpm)
1. Configure ZJU mirrors from manual. [Fedora](https://mirror.zju.edu.cn/docs/fedora/)/[CentOS](https://mirror.zju.edu.cn/docs/centos/)
2. Configure [EPEL of ZJU mirrors](https://mirrors.zju.edu.cn/epel/) (Taking CentOS installation as an example)
1. Run `yum install epel-release` to install EPEL.
2. Edit `/etc/yum.repos.d/epel.repo` , uncomment lines begin with `#baseurl=` (Remove leading `#` sign) and comment lines begin with `mirrorlist=` (Prepend `#` sign)
3. Edit `/etc/yum.repos.d/epel.repo` , replace `https://download.fedoraproject.org/pub` with `https://mirrors.zju.edu.cn` .
3. Run these command.
```bash ```bash
curl https://mirrors.zju.edu.cn/openzjunet/zjumirrors.pgp | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-ZJUMIRRORS
curl https://mirrors.zju.edu.cn/openzjunet/zjunet.repo | sudo tee /etc/yum.repos.d/zjunet.repo
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZJUMIRRORS
sudo yum install zjunet
```
4. The installation has completed.
5. If you are setting up a server, we suggest you run `zjunet wlan disable` to disable WLAN capability.
### OpenWrt (opk)
Download .opk package from [Release Page](https://github.com/QSCTech/zjunet/releases) (onto your router),
Run `opkg install ./zjunet_<version>_all.opk`.
### Arch Linux (AUR)
Simply run `yay zjunet` to build the package from AUR and install it.
Keep in mind that a fresh install without internet connection is almost impossible.
Please complete installation before connecting to the intranet.
### Other Linux (Build from source code)
```bash
xl2tpd -v; dig -v # Check installation of dependencies. There should be 3 version numbers.
# Under proper directory
git clone https://github.com/QSCTech/zjunet.git git clone https://github.com/QSCTech/zjunet.git
cd zjunet cd zjunet
sudo ./install.sh sudo ./install.sh
# If update is necessary, run `git pull` and `sudo ./install.sh`
# If you are setting up a server, we suggest you run `zjunet wlan disable` to disable WLAN capability.
``` ```
## Known Issues **ATTENTION** Requirement check will **NOT** be done running `./install.sh`.
Please run `xl2tpd -v` and `dig -v` to verify the installation.
### ppp0 may disappear on openwrt ## Troubleshooting
make /etc/ppp/options's lcp-echo-failure larger. ### Packet lose
see also https://github.com/QSCTech/zjunet/issues/39 This is a known issue.
When overlapping VPN and ZJUWLAN, network packet may be lost.
(because of nexthop in routing table).
## Openwrt Contributions to this issue are welcomed. (Maybe using `iptables`)
Install xl2tpd: ### ppp0 may disappears on OpenWrt
https://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/packages/ Set lcp-echo-failure larger in /etc/ppp/options.
## Dev See also #39
QSCer 可以直接向这个 repo push 而不用发 pull request。 ### Other problems?
有什么疑虑可以提 issue 问一下,
或者直接来办公室找我(zenozeng)。
master分支请尽可能保持稳定
如果要做破坏性变更的话,
进 dev 分支,
或者拉开发分支。
### Build Please send mail to tech@zjuqsc.com if you have any other problem.
## Contribute to this project
QSCers may Push directly without sending Pull Requests。
Please write an Issue if you have worries. Contact maintainer directly if necessary.
**PRs from non-QSCers are also welcomed.**
### Packaging Instruction
*(Not finished yet)*
#### Debian #### Debian
```bash ```bash
sudo apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder sudo apt-get install build-essential autoconf automake autotools-dev dh-make \
debhelper devscripts fakeroot xutils lintian pbuilder rpm
cd build
./build.sh
``` ```
##### see also ##### See Also
- http://www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html - http://www.webupd8.org/2010/01/how-to-create-deb-package-ubuntu-debian.html
- http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/ - http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/
#### Openwrt #### OpenWrt
##### see also ##### See Also
- http://lists.openmoko.org/pipermail/devel/2008-July/000496.html - http://lists.openmoko.org/pipermail/devel/2008-July/000496.html
## Links ### Links
- [Array in unix Bourne Shell](http://unix.stackexchange.com/questions/137566/array-in-unix-bourne-shell) - [Array in unix Bourne Shell](http://unix.stackexchange.com/questions/137566/array-in-unix-bourne-shell)

139
README.zh.md Normal file
View File

@ -0,0 +1,139 @@
# zjunet
适用于 ZJU 的 VPN, WLAN 和 DNS 命令行工具。
## 功能
- 支持 ZJU VPN 连接。
- 支持 ZJUWLAN 连接。
- 路由器支持。
- 多拨支持(多账户负载均衡)。
- ZJUWLAN 与 ZJUVPN 带宽叠加1 WLAN + N VPN在 ZJUWLAN 下)
- DNS 自动测试设置(适用于 DNS 坏掉的情况)
## 依赖
- xl2tpd
- `dig` (在不同平台的包不同)
## 安装
根据发行版的不同,安装方式略有区别。为了更好的为您提供服务,建议您从求是潮网站的仓库下载。
(求是潮网站在校内也可以访问,安装时不需要先从仓库手动下载。)
考虑到需要安装 zjunet 的机器通常没有办法访问外网,建议配合 [浙大源](https://mirrors.zju.edu.cn/) 安装。
下面将按照不同的发行版分别列出安装步骤。如果你在安装前后遇到任何问题,请向下浏览本文件的“疑难解答”部分。
### Debian / Ubuntu (deb)
1. 使用浙大源配置内网软件包镜像。 [Ubuntu](https://mirror.zju.edu.cn/docs/ubuntu/)/[Debian](https://mirror.zju.edu.cn/docs/debian/).
2. 依次输入并执行下列命令:
``` bash
curl https://mirrors.zju.edu.cn/openzjunet/zjumirrors.pgp | sudo tee /etc/apt/trusted.gpg.d/zjumirrors.asc
curl https://mirrors.zju.edu.cn/openzjunet/zjunet.list | sudo tee /etc/apt/sources.list.d/zjunet.list
sudo apt-get update
sudo apt-get install zjunet
```
3. 安装结束!您可以输入 `zjunet version` 查看安装的版本,输入 `zjunet usage` 查看用法。
4. 如果你是服务器用户,建议运行 `zjunet wlan disable` 来彻底禁用 WLAN 功能。
### Fedora / CentOS (rpm)
1. 使用浙大源配置内网软件包镜像。 [Fedora](https://mirror.zju.edu.cn/docs/fedora/)/[CentOS](https://mirror.zju.edu.cn/docs/centos/)
2. 执行这些步骤以使用 [浙大源 EPEL](https://mirrors.zju.edu.cn/epel/) (以 CentOS 为例):
1. 运行 `yum install epel-release` 以安装 EPEL 。
2. 编辑 `/etc/yum.repos.d/epel.repo` ,将所有以 `#baseurl=` 开头的行取消注释(删除行首 `#` 符号)并注释以 `mirrorlist=` 开头的行(在行首添加 `#` 符号)
3. 继续编辑 `/etc/yum.repos.d/epel.repo` ,将所有 `https://download.fedoraproject.org/pub` 替换为 `https://mirrors.zju.edu.cn`
3. 依次输入并执行下列命令:
```bash
curl https://mirrors.zju.edu.cn/openzjunet/zjumirrors.pgp | sudo tee /etc/pki/rpm-gpg/RPM-GPG-KEY-ZJUMIRRORS
curl https://mirrors.zju.edu.cn/openzjunet/zjunet.repo | sudo tee /etc/yum.repos.d/zjunet.repo
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-ZJUMIRRORS
sudo yum install zjunet
```
4. 安装结束!您可以输入 `zjunet version` 查看安装的版本,输入 `zjunet usage` 查看用法。
5. 如果你是服务器用户,建议运行 `zjunet wlan disable` 来彻底禁用 WLAN 功能。
### OpenWrt (opk)
从 [Releases 页](https://github.com/QSCTech/zjunet/releases) 下载 opk 包到路由器上,
运行 `opkg install ./zjunet_版本_all.opk`
### Arch Linux (AUR)
直接运行 `yay zjunet` 即可下载并安装。
请记住,在没有互联网连接的环境中是几乎不可能安装好的。
请在连接到校内网前,在有互联网连接的环境中先完成安装。
### 其他 Linux (源代码安装)
```bash
xl2tpd -v; dig -v # 检查依赖命令的安装情况。这句命令将输出三个版本号。
# 在合适的目录下
git clone https://github.com/QSCTech/zjunet.git
cd zjunet
sudo ./install.sh
# 如果想要更新请在 zjunet 目录下运行 git pull 并再次 sudo ./install.sh
# 如果你是服务器用户,建议运行 `zjunet wlan disable` 来彻底禁用 WLAN 功能。
```
**注意** 运行 `./install.sh`**不会** 确认必要依赖是否已经安装。
您应当先运行 `xl2tpd -v``dig -v` 确认安装。
## 疑难解答
### 出现了 `xl2tpd-control: command not found` 的提示但直接运行 `xl2tpd-control` 有效
出现这种情况通常是由于 `sudo``secure path` 被启用。
请编辑 `/etc/sudoers` 并在 `Defaults secure_path=xxxxxxx` 行添加 `xl2tpd-control` 所在路径(运行 `which xl2tpd-control` 查看)。编辑后的这行类似这样:
```
Defaults secure_path="/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin"
```
你可以运行 `sudo env | grep PATH` 来验证配置。显示的内容应当包括刚才添加的路径。
### 丢包
这是一个已知问题。在同时连接 VPN 和 ZJUWLAN 时,
在有的机子上会丢包(因为设定的路由使用了 nexthop )。
暂时没有人来解决这个问题,欢迎有志者贡献(可以考虑用 `iptables`
### OpenWrt 上的 ppp0 消失了
将 /etc/ppp/options 中的 lcp-echo-failure 调大。
可见于 #39
### 我还有其它问题
如果你还有其它问题,请与我们联系。
您可以发送邮件至 tech@zjuqsc.com 。
## 如何贡献
求是潮成员可以直接向这个仓库 Push 而不用发起 Pull requests。
有任何疑虑都可以提 Issue ,也可以与现任 Maintainer 联系。
**本项目也接受非求是潮成员发起的 PR 。**
### 开发指南
开发信息请查看 [英文 README](README.md#packaging-instruction) 。

1
VERSION Normal file
View File

@ -0,0 +1 @@
0.3.3-6

5
bin/zjunet Normal file
View File

@ -0,0 +1,5 @@
#!/bin/sh
set -e
/usr/lib/zjunet/zjunet.sh "$@"

42
build/build-pkgbuild.sh Executable file
View File

@ -0,0 +1,42 @@
#!/bin/bash
PKGNAME=zjunet
PKGVER=$(cat $(dirname $0)/../VERSION)
PKGVER_NOREL=${PKGVER%%-*}
PKGREL=${PKGVER:$((${#PKGVER_NOREL}+1))}
if [[ -z $PKGREL ]]; then
PKGREL=1
fi
set -xe
wget https://github.com/QSCTech/$PKGNAME/archive/v$PKGVER.tar.gz -O $PKGNAME-$PKGVER.tar.gz
FILE_MD5=$(md5sum $PKGNAME-$PKGVER.tar.gz | cut -f1 -d' ')
FILE_SHA1=$(sha1sum $PKGNAME-$PKGVER.tar.gz | cut -f1 -d' ')
FILE_SHA256=$(sha256sum $PKGNAME-$PKGVER.tar.gz | cut -f1 -d' ')
cat > PKGBUILD <<EOF
# Maintainer: Azuk 443 <me@azuk.top>
pkgname=$PKGNAME
pkgver=$PKGVER_NOREL
pkgrel=$PKGREL
pkgdesc="Command Line Scripts for ZJU"
url="https://github.com/QSCTech/$PKGNAME"
arch=('any')
license=('GPL')
depends=('xl2tpd>=1.3.7' 'dnsutils')
source=("$PKGNAME-$PKGVER.tar.gz::https://github.com/QSCTech/$PKGNAME/archive/v$PKGVER.tar.gz")
md5sums=('$FILE_MD5')
sha1sums=('$FILE_SHA1')
sha256sums=('$FILE_SHA256')
package() {
cd "\$srcdir/$PKGNAME-$PKGVER"
DESTDIR=\$pkgdir PREFIX=/usr ./install.sh
}
EOF
makepkg $*
makepkg --printsrcinfo > .SRCINFO

View File

@ -1,12 +1,52 @@
#!/bin/bash #!/bin/bash
VERSION=0.1.2-0 VERSION=$(cat ../VERSION)
cd debian fail() {
./build.sh $VERSION > /dev/null echo -e "\033[31mERROR: Failed to build $1\033[0m" 1>&2
}
cd ../openwrt if [[ $# -gt 0 ]]; then
./build.sh $VERSION > /dev/null for arg in $*; do
case $arg in
rpm)
USE_RPM=1
;;
debian)
USE_DEB=1
;;
openwrt)
USE_OPK=1
;;
*)
echo "Invalid package $arg"
exit 1
esac
done
else
USE_RPM=1
USE_DEB=1
USE_OPK=1
fi
cd .. if [[ ! -z $USE_RPM ]]; then
find . -regextype posix-egrep -regex ".*\.(opk|deb)$" pushd rpm > /dev/null
./build.sh $VERSION || fail 'RPM package'
popd > /dev/null
fi
if [[ ! -z $USE_DEB ]]; then
pushd debian > /dev/null
./build.sh $VERSION || fail 'Debian package'
popd > /dev/null
fi
if [[ ! -z $USE_OPK ]]; then
pushd openwrt > /dev/null
./build.sh $VERSION || fail 'OpenWrt package'
popd > /dev/null
fi
echo -ne "\033[0;32m"
find . -regextype posix-egrep -regex ".*\.(opk|deb|rpm)$"
echo -ne "\033[0m"

127
build/changelog.py Executable file
View File

@ -0,0 +1,127 @@
#!/usr/bin/env python
from __future__ import print_function
import os
import sys
import json
import base64
import datetime
if sys.version_info.major < 3:
reload(sys)
sys.setdefaultencoding('utf8')
try:
import urllib3
http = urllib3.PoolManager()
def makereq(url, headers):
return http.request('GET', url, headers=headers)
except ImportError:
import urllib2 as request
class MyResponse:
def __init__(self, status, data):
self.status = status
self.data = data
def makereq(url, headers):
f = request.urlopen(request.Request(url, headers=headers))
return MyResponse(f.getcode(), f.read().decode('utf-8'))
if 'fromisoformat' in dir(datetime.datetime):
def get_time(s):
return datetime.datetime.fromisoformat(s.replace('Z', '+00:00'))
else:
try:
from dateutil.parser import parser
def get_time(s):
return parser().parse(s)
except ImportError:
def get_time(s):
return datetime.datetime.strptime(s, "%Y-%m-%dT%H:%M:%SZ")
GITHUB_AUTH = None
tok = os.getenv('GITHUB_TOKEN')
usn = os.getenv('GITHUB_USERNAME')
psw = os.getenv('GITHUB_PASSWORD')
if tok is not None:
GITHUB_AUTH = 'token {}'.format(tok)
elif usn is not None and psw is not None:
GITHUB_AUTH = 'Basic {}'.format(base64.b64encode('{}:{}'.format(usn, psw).encode('utf-8')).decode('utf-8'))
def get(url):
headers = {
'Accept': 'application/vnd.github.v3+json',
'User-Agent': 'zjunet-build-agent/0.1',
}
if GITHUB_AUTH is not None:
headers['Authorization'] = GITHUB_AUTH
r = makereq(url, headers=headers)
assert r.status // 100 == 2, 'HTTP Status {} != 2xx while requesting {}'.format(r.status, url)
if r.status != 200:
print('WARNING: HTTP {} while requesting {}'.format(r.status, url))
return r.data
def api_get(url):
return json.loads(get('https://api.github.com/' + url))
author_cache = {}
def get_author(name):
if name in author_cache:
return author_cache[name]
print('Reading data for {}'.format(name), end=' : ', file=sys.stderr)
data = api_get('users/{}'.format(name))
data = {
'name': data['name'],
'email': data['email'],
}
author_cache[name] = data
print('{} <{}>'.format(data['name'], data['email']), file=sys.stderr)
return data
def get_changelog(owner, name):
print('Reading releases of {1} in {0}'.format(owner, name), file=sys.stderr)
releases = api_get('repos/{}/{}/releases'.format(owner, name))
releases = filter(lambda v: not v['draft'] and not v['prerelease'], releases)
data = []
for rel in releases:
name = rel['name'] or rel['tag_name']
item = {
'time': get_time(rel['published_at']),
'name': name,
'version': name[name.rfind('v') + 1:].split(','),
'author': get_author(rel['author']['login']),
'changes': None,
}
tbody = rel['body'].strip()
if tbody != '':
if tbody[0] != '-' and '\n' not in tbody:
item['changes'] = '- ' + tbody
else:
item['changes'] = tbody
data.append(item)
return ChangeLog(data)
class ChangeLog:
def __init__(self, data):
self.raw = data
def rpm(self):
rel = '%changelog\n'
for item in self.raw:
rel += '* {} {} <{}> - {}\n'.format(item['time'].strftime('%a %b %d %Y'), item['author']['name'], item['author']['email'], '.'.join(item['version']))
if item['changes'] is not None:
rel += item['changes'] + '\n'
return rel
available_formats = list(filter(lambda v: v[0] != '_', dir(ChangeLog)))
if len(sys.argv) != 2:
print('Usage: {} <format>\nAvailable formats: {}'.format(sys.argv[0], ','.join(available_formats)))
else:
changelog = get_changelog('QSCTech', 'zjunet')
if hasattr(changelog, sys.argv[1]):
print(getattr(changelog, sys.argv[1])())
else:
print('Invalid format {}\nAvailable formats: {}'.format(','.join(available_formats)))

View File

@ -1,17 +1,32 @@
#!/bin/sh #!/bin/sh
set -e
rm -rf *.deb rm -rf *.deb
VERSION=$1 VERSION=$1
# share
mkdir -p ./debian/usr/share/zjunet
cp ../../miscellaneous/* ./debian/usr/share/zjunet
cp ../../VERSION ./debian/usr/share/zjunet
# lib # lib
mkdir -p ./debian/usr/lib/zjunet mkdir -p ./debian/usr/lib/zjunet
cp ../../lib/* ./debian/usr/lib/zjunet cp ../../lib/*.sh ./debian/usr/lib/zjunet
# bin # bin
mkdir -p ./debian/usr/bin install -m 755 -d ./debian/usr/bin
echo '/usr/lib/zjunet/zjunet.sh "$@"' >> ./debian/usr/bin/zjunet install -m 755 ../../bin/zjunet ./debian/usr/bin/zjunet
chmod +x ./debian/usr/bin/zjunet
# postinst
mkdir -p debian/DEBIAN
cat > debian/DEBIAN/postinst <<EOF
#!/bin/sh
/usr/share/zjunet/zjunet-postinst
EOF
chmod 755 debian/DEBIAN/postinst
# contorl file # contorl file
mkdir -p debian/DEBIAN mkdir -p debian/DEBIAN
@ -21,17 +36,18 @@ Version: $VERSION
Section: net Section: net
Priority: optional Priority: optional
Architecture: all Architecture: all
Depends: xl2tpd (>= 1.3.1), curl Depends: xl2tpd (>= 1.3.7), dnsutils
Maintainer: Zeno Zeng <zenoofzeng@gmail.com> Maintainer: Azuk 443 <me@azuk.top>
Description: Command Line Scripts for ZJU Description: Command Line Scripts for ZJU Campus Network
This script provides a VPN / WLAN / NEXTHOP for ZJUer. This script provides a VPN / WLAN / NEXTHOP for ZJUer.
EOF EOF
# dpkg-deb # dpkg-deb
find ./debian -type d | xargs chmod 755 find ./debian -type d | xargs chmod 755
dpkg-deb --build debian fakeroot dpkg-deb -Zxz --build debian
mv debian.deb zjunet_${VERSION}_all.deb mv debian.deb zjunet_${VERSION}_all.deb
# remove debian/ # remove debian/
rm -rf ./debian rm -rf ./debian
rm -f control rm -rf control

View File

@ -1,17 +1,22 @@
#!/bin/sh #!/bin/sh
set -e
rm -rf *.opk rm -rf *.opk
VERSION=$1 VERSION=$1
# share
mkdir -p ./debian/usr/share/zjunet
cp ../../miscellaneous/* ./debian/usr/share/zjunet
cp ../../VERSION ./debian/usr/share/zjunet
# lib # lib
mkdir -p ./debian/usr/lib/zjunet mkdir -p ./debian/usr/lib/zjunet
cp ../../lib/* ./debian/usr/lib/zjunet cp ../../lib/*.sh ./debian/usr/lib/zjunet
# bin # bin
mkdir -p ./debian/usr/bin install -m 755 -d ./debian/usr/bin
echo '/usr/lib/zjunet/zjunet.sh "$@"' >> ./debian/usr/bin/zjunet install -m 755 ../../bin/zjunet ./debian/usr/bin/zjunet
chmod +x ./debian/usr/bin/zjunet
# contorl file # contorl file
mkdir -p debian/DEBIAN mkdir -p debian/DEBIAN
@ -21,15 +26,15 @@ Version: $VERSION
Section: net Section: net
Priority: optional Priority: optional
Architecture: all Architecture: all
Depends: xl2tpd (>= 1.3.1), curl Depends: xl2tpd (>= 1.3.7), bind-dig
Maintainer: Zeno Zeng <zenoofzeng@gmail.com> Maintainer: Azuk 443 <me@azuk.top>
Description: Command Line Scripts for ZJU Description: Command Line Scripts for ZJU Campus Network
This script provides a VPN / WLAN / NEXTHOP for ZJUer. This script provides a VPN / WLAN / NEXTHOP for ZJUer.
EOF EOF
# dpkg-deb # dpkg-deb
find ./debian -type d | xargs chmod 755 find ./debian -type d | xargs chmod 755
dpkg-deb -Zgzip --build debian # for opkg fakeroot dpkg-deb -Zgzip --build debian # for opkg
mv debian.deb zjunet_${VERSION}_all.opk mv debian.deb zjunet_${VERSION}_all.opk
# remove debian/ # remove debian/

45
build/rpm/build.sh Executable file
View File

@ -0,0 +1,45 @@
#!/bin/sh
set -e
rm -rf *.rpm
VERSION=$1
REALVERSION=`echo "$VERSION" | cut -d'-' -f1`
RELEASE=`echo "$VERSION" | cut -d'-' -f2`
mkdir -p rpm/
# share
cp ../../miscellaneous/* rpm/
cp ../../VERSION rpm/
# lib
mkdir -p rpm/lib/
cp ../../lib/* rpm/lib/
# bin
echo '/usr/lib/zjunet/zjunet.sh "$@"' > rpm/zjunet
install -m 755 -d ./debian/usr/bin
# rpm
ARCH="noarch"
SEMINAME="zjunet-$REALVERSION"
FULLNAME="zjunet-$VERSION"
rm -rf ${SEMINAME}.tar.gz
find rpm -type d | xargs chmod 755
rm -rf $SEMINAME
mv rpm $SEMINAME
tar zcf ${SEMINAME}.tar.gz $SEMINAME
mkdir -p $HOME/rpmbuild/SOURCES
cp ${SEMINAME}.tar.gz $HOME/rpmbuild/SOURCES
cp build_spec.sh $SEMINAME/
cd $SEMINAME
./build_spec.sh $VERSION
cd ..
cp "$SEMINAME/zjunet.spec" ./
mkdir -p "$HOME/rpmbuild/SPECS"
cp zjunet.spec "$HOME/rpmbuild/SPECS"
fakeroot rpmbuild -ba zjunet.spec --target $ARCH
rm -rf zjunet.spec ${SEMINAME}.tar.gz $SEMINAME
cp $HOME/rpmbuild/RPMS/$ARCH/${FULLNAME}.$ARCH.rpm ./

63
build/rpm/build_spec.sh Executable file
View File

@ -0,0 +1,63 @@
#!/bin/bash
VERSION=$1
REALVERSION=`echo "$VERSION" | cut -d'-' -f1`
RELEASE=`echo "$VERSION" | cut -d'-' -f2`
echo "Summary: Command Line Scripts for ZJU " > zjunet.spec
echo "Name: zjunet" >> zjunet.spec
echo "Version: $REALVERSION" >> zjunet.spec
echo "Release: $RELEASE" >> zjunet.spec
echo "License: GPL" >> zjunet.spec
echo "Group: Applications/Internet" >> zjunet.spec
echo "URL: https://github.com/QSCTech/zjunet/" >> zjunet.spec
echo "Vendor: Qiu Shi Chao Website of Zhejiang University" >> zjunet.spec
echo "Packager: Azuk 443 <me@azuk.top>" >> zjunet.spec
echo "Requires: xl2tpd >= 1.3.7, bind-utils" >> zjunet.spec
echo "BuildRoot: %{_builddir}/%{name}-root" >> zjunet.spec
echo "Source: %{name}-%{version}.tar.gz" >> zjunet.spec
echo "BuildArch: noarch" >> zjunet.spec
echo "" >> zjunet.spec
echo "%description" >> zjunet.spec
echo "Command Line Scripts for ZJU " >> zjunet.spec
echo "This script provides a VPN / WLAN / NEXTHOP for ZJUer. " >> zjunet.spec
echo "" >> zjunet.spec
echo "%prep" >> zjunet.spec
echo "%setup -q" >> zjunet.spec
echo "" >> zjunet.spec
echo "%build" >> zjunet.spec
echo 'echo $RPM_BUILD' >> zjunet.spec
echo "" >> zjunet.spec
echo "%install" >> zjunet.spec
echo 'rm -rf $RPM_BUILD_ROOT' >> zjunet.spec
echo 'mkdir -p $RPM_BUILD_ROOT/usr/bin' >> zjunet.spec
echo 'mkdir -p $RPM_BUILD_ROOT/usr/lib/zjunet' >> zjunet.spec
echo 'mkdir -p $RPM_BUILD_ROOT/usr/share/zjunet' >> zjunet.spec
echo 'install -m 755 zjunet $RPM_BUILD_ROOT/usr/bin/zjunet' >> zjunet.spec
echo 'install -m 755 zjunet-postinst $RPM_BUILD_ROOT/usr/share/zjunet/zjunet-postinst' >> zjunet.spec
cd lib
for f in *.sh; do
echo "install -m 755 lib/$f \$RPM_BUILD_ROOT/usr/lib/zjunet/$f" >> ../zjunet.spec
done
cd ..
echo 'install -m 644 VERSION $RPM_BUILD_ROOT/usr/share/zjunet/VERSION' >> zjunet.spec
echo "" >> zjunet.spec
echo "%files" >> zjunet.spec
echo "%defattr(-,root,root)" >> zjunet.spec
echo "/usr/bin/zjunet" >> zjunet.spec
echo "/usr/share/zjunet/zjunet-postinst" >> zjunet.spec
echo "/usr/share/zjunet/VERSION" >> zjunet.spec
cd lib
for f in *.sh; do
echo "/usr/lib/zjunet/$f" >> ../zjunet.spec
done
cd ..
echo "" >> zjunet.spec
echo "%clean" >> zjunet.spec
echo 'rm -rf $RPM_BUILD_ROOT' >> zjunet.spec
echo "" >> zjunet.spec
echo "%post" >> zjunet.spec
echo "/usr/share/zjunet/zjunet-postinst || true" >> zjunet.spec
echo "" >> zjunet.spec
../../changelog.py rpm >> zjunet.spec

View File

@ -1,12 +1,25 @@
#!/bin/sh #!/bin/sh
set -e
BASEDIR=$(dirname $0)/lib BASEDIR=$(dirname $0)/lib
mkdir -p /usr/local/lib/zjunet if [ -z "$PREFIX" ]; then
cp -rf $BASEDIR/* /usr/local/lib/zjunet PREFIX=/usr/local
mkdir -p /usr/local/bin fi
echo "#!/bin/sh" > /usr/local/bin/zjunet
echo '/usr/local/lib/zjunet/zjunet.sh "$@"' >> /usr/local/bin/zjunet mkdir -p $DESTDIR$PREFIX/lib/zjunet
chmod +x /usr/local/bin/zjunet cp -rf $BASEDIR/* $DESTDIR$PREFIX/lib/zjunet
mkdir -p $DESTDIR$PREFIX/bin
mkdir -p $DESTDIR$PREFIX/share/zjunet
ln -fs ../../share/zjunet/VERSION $DESTDIR$PREFIX/lib/zjunet/VERSION
cp -f VERSION $DESTDIR$PREFIX/share/zjunet
cat > $DESTDIR$PREFIX/bin/zjunet << EOF
#!/bin/sh
$PREFIX/lib/zjunet/zjunet.sh "\$@"
EOF
chmod +x $DESTDIR$PREFIX/bin/zjunet
echo "[INFO] Done." echo "[INFO] Done."
echo echo
zjunet usage if [[ -z $DESTDIR ]]; then
zjunet usage
fi

1
lib/VERSION Symbolic link
View File

@ -0,0 +1 @@
../VERSION

View File

@ -28,9 +28,10 @@ zju_test_and_set_up_dns () {
} }
# 浙大的DNS不是很稳定这里列了备用方案 # 浙大的DNS不是很稳定这里列了备用方案
# 官方 > 10.12.10.12 > Senorsen (QSC Server) DNS > ALI YUN # 官方 > 10.12.10.12 > Senorsen (QSC Server) DNS > 114 DNS
zju_test_and_set_up_dns \ zju_test_and_set_up_dns \
$1 \
10.10.0.21 10.10.0.22 10.10.0.23 \ 10.10.0.21 10.10.0.22 10.10.0.23 \
10.12.10.12 \ 10.12.10.12 \
10.202.68.43 \ 10.202.68.73 \
114.114.114.114 114.114.114.114

View File

@ -20,6 +20,8 @@
# along with this program. If not, see # along with this program. If not, see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
ip route flush cache
ip_route_del() { ip_route_del() {
count=$(ip route show $1 | wc -l) count=$(ip route show $1 | wc -l)
if [ "${count}" -gt "0" ]; then if [ "${count}" -gt "0" ]; then
@ -31,7 +33,9 @@ echo "[INFO] Setting up ip route."
gateway=$(ip route get 10.10.0.21 | grep via | awk '{print $3}') gateway=$(ip route get 10.10.0.21 | grep via | awk '{print $3}')
devs_count=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.' | awk '{print $7}' | wc -l) # Recently VPN server 10.5.1.7 has the P-t-P: 172.172.172.2, after some updates.
# Mar 2019 Update: A new VPN server 10.0.2.27 has been set up.
devs_count=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.\|172.172.172.\|10.0.2.' | awk '{print $7}' | wc -l)
if [ "${devs_count}" -eq "0" ]; then if [ "${devs_count}" -eq "0" ]; then
dev=$(ip route get 10.10.0.21 | head -n1 | awk '{print $5}') dev=$(ip route get 10.10.0.21 | head -n1 | awk '{print $5}')
@ -45,6 +49,7 @@ if [ "${devs_count}" -eq "0" ]; then
ip_route_del 210.32.160.0/21 ip_route_del 210.32.160.0/21
ip_route_del 210.32.168.0/22 ip_route_del 210.32.168.0/22
ip_route_del 210.32.172.0/23 ip_route_del 210.32.172.0/23
ip_route_del 210.32.174.0/24
ip_route_del 210.32.176.0/20 ip_route_del 210.32.176.0/20
ip_route_del 222.205.0.0/17 ip_route_del 222.205.0.0/17
ip_route_del 10.5.1.0/24 ip_route_del 10.5.1.0/24
@ -64,8 +69,6 @@ case "$gateway" in
10.189.*) 10.189.*)
ip route replace 10.50.200.245 via $gateway ip route replace 10.50.200.245 via $gateway
;; ;;
10.171.*)
;;
*) *)
# 内网静态路由 # 内网静态路由
# See also: #18 (thanks Hexcles Ma) # See also: #18 (thanks Hexcles Ma)
@ -76,41 +79,32 @@ case "$gateway" in
ip route replace 58.196.224.0/20 via $gateway ip route replace 58.196.224.0/20 via $gateway
ip route replace 58.200.100.0/24 via $gateway ip route replace 58.200.100.0/24 via $gateway
# The public CERNET IP of most ZJU servers, which can be reached directly in the Intranet. # The public CERNET IP of most ZJU servers, which can be reached directly in the Intranet through 10.0.0.0/8.
# Most of them do have a 10.* IP, but sometimes school DNS just returns the public ones. # If these servers are DNATed(have 210.32.*.* IP), we can't reach it through our gateway or VPN P-t-P.
# However these addresses also belong to Yu Quan Campus, our VPN, etc.,
# Which can be reached through our internal gateway.
ip route replace 210.32.0.0/20 via $gateway ip route replace 210.32.0.0/20 via $gateway
ip route replace 210.32.128.0/19 via $gateway ip route replace 210.32.128.0/19 via $gateway
ip route replace 210.32.160.0/21 via $gateway ip route replace 210.32.160.0/21 via $gateway
ip route replace 210.32.168.0/22 via $gateway ip route replace 210.32.168.0/22 via $gateway
ip route replace 210.32.172.0/23 via $gateway ip route replace 210.32.172.0/23 via $gateway
ip route replace 210.32.174.0/24 via $gateway
ip route replace 210.32.176.0/20 via $gateway ip route replace 210.32.176.0/20 via $gateway
# 玉泉和我们 vpn 后的 ip
ip route replace 222.205.0.0/17 via $gateway ip route replace 222.205.0.0/17 via $gateway
;; ;;
esac esac
# NEXTHOP # NEXTHOP
devs=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.' | awk '{print $7}') # Recently VPN server 10.5.1.7 has the P-t-P: 172.172.172.2, after some updates.
# Mar 2019 Update: A new VPN server 10.0.2.27 has been set up.
devs=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.\|172.172.172.\|10.0.2.' | awk '{print $7}')
cmd="ip route replace default" cmd="ip route replace default"
for dev in $devs; do for dev in $devs; do
cmd="${cmd} nexthop dev ${dev}" cmd="${cmd} nexthop dev ${dev}"
done done
case "$gateway" in
10.189.*)
# WLAN
zjuwlan_test_ip=10.202.68.44
ip route replace $zjuwlan_test_ip via ${gateway}
zjuwlan_status=`curl -s $zjuwlan_test_ip | grep net.zju.edu.cn | wc -l`
if [ $zjuwlan_status -eq 0 ]
then
cmd="${cmd} nexthop via ${gateway}"
fi
ip route del $zjuwlan_test_ip || true
;;
esac
$cmd $cmd
ip route ip route
ip route flush cache

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/bash
# user.sh -- User Manager # user.sh -- User Manager
# #
@ -18,22 +18,17 @@
# along with this program. If not, see # along with this program. If not, see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
# init L2TPD_CFG_FILE=/etc/xl2tpd/xl2tpd.conf
users_enabled="$HOME/.zjunet/users-enabled"
users_disabled="$HOME/.zjunet/users-disabled"
mkdir -p $users_enabled
mkdir -p $users_disabled
BASEDIR=$(dirname $0) BASEDIR=$(dirname $0)
getall() { getall() {
ls -1A $users_enabled | xargs | tr "\n" " " cat $L2TPD_CFG_FILE | grep 'lac zju-l2tp-' | sed 's/\[lac zju-l2tp-//' | sed 's/\]//'
} }
edituser() { edituser() {
username=$1 username=$1
password=$2 password=$2
echo $password > "$users_enabled/${username}"
echo "[INFO] Disconnect VPN" echo "[INFO] Disconnect VPN"
"${BASEDIR}/vpn.sh" disconnect "${BASEDIR}/vpn.sh" disconnect
echo "[INFO] Write to xl2tpd.conf" echo "[INFO] Write to xl2tpd.conf"
@ -45,18 +40,6 @@ edituser() {
# dispatch # dispatch
case "$1" in case "$1" in
enable)
users=$(ls -1A $users_disabled | xargs | tr "\n" " ")
read -p "Enable User [ ${users}]: " username
mv "${users_disabled}/${username}" "${users_enabled}/${username}"
;;
disable)
users=$(getall)
read -p "Disable User [ ${users}]: " username
mv "${users_enabled}/${username}" "${users_disabled}/${username}"
;;
add) add)
read -p "username: " username read -p "username: " username
read -p "password: " password read -p "password: " password
@ -70,20 +53,14 @@ case "$1" in
edituser $username $password edituser $username $password
;; ;;
delete)
users=$(getall)
read -p "Delete User [ ${users}]: " username
rm -i "$users_enabled/${username}"
;;
list) list)
ls -1A $users_enabled getall
;; ;;
# Get a user # Get a user
# @private # @private
get) get)
count=$(ls -1A $users_enabled | wc -l) count=$(getall | wc -l)
if [ "${count}" -eq "0" ]; then if [ "${count}" -eq "0" ]; then
echo "No user found. Use 'zjunet user add' to add a user." echo "No user found. Use 'zjunet user add' to add a user."
exit 1 exit 1
@ -92,7 +69,7 @@ case "$1" in
users=$(getall) users=$(getall)
read -p "Choose User [ ${users}]: " username read -p "Choose User [ ${users}]: " username
else else
username=$(ls -1 $users_enabled | head -n1) username=$(getall | head -n1)
fi fi
echo $username echo $username
fi fi
@ -107,8 +84,9 @@ case "$1" in
# @private # @private
getpwd) getpwd)
username=$2 username=$2
cat "${users_enabled}/${username}" "${BASEDIR}/sudo.sh" cat /etc/ppp/peers/zju-l2tp-${username} | grep password | sed 's/password //'
;; ;;
*) *)
${BASEDIR}/zjunet.sh usage ${BASEDIR}/zjunet.sh usage
;; ;;

View File

@ -34,20 +34,20 @@ flush() {
disconnect() { disconnect() {
users=$("${BASEDIR}/user.sh" getall) users=$("${BASEDIR}/user.sh" getall)
for username in $users; do for username in $users; do
echo "[INFO] Logout: ${username}"
"${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" disconnect $username "${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" disconnect $username
done done
"${BASEDIR}/sudo.sh" "${BASEDIR}/route.sh" "${BASEDIR}/sudo.sh" "${BASEDIR}/route.sh"
} }
connect() { connect() {
disconnect
users=$("${BASEDIR}/user.sh" getall) users=$("${BASEDIR}/user.sh" getall)
"${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" restart
for username in $users; do for username in $users; do
password=$("${BASEDIR}/user.sh" getpwd $username) password=$("${BASEDIR}/user.sh" getpwd $username)
echo "[INFO] Login using ${username}" echo "[INFO] Login using ${username}"
"${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" connect $username $password "${BASEDIR}/sudo.sh" "${BASEDIR}/xl2tpd.sh" waituser $username
flush flush
done done
@ -65,16 +65,18 @@ connect() {
case "$1" in case "$1" in
-d) d|-d|disconnect)
disconnect disconnect
;; ;;
disconnect) ""|c|-c|connect)
disconnect disconnect
;; sleep 3
*)
connect connect
;; ;;
*)
echo Invalid subcommand \"$1\" for \`zjunet vpn\`. Run \`zjunet usage\` for help.
;;
esac esac

View File

@ -2,10 +2,10 @@
# wlan.sh -- login/logout for ZJUWLAN # wlan.sh -- login/logout for ZJUWLAN
# #
# Requirements: curl
#
# Copyright (C) 2014 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> # Copyright (C) 2014 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
# Copyright (C) 2014 Zeno Zeng <zenoofzeng@gmail.com> # Copyright (C) 2014 Zeno Zeng <zenoofzeng@gmail.com>
# Copyright (C) 2017 Wu Fan <wfwf1997@gmail.com>
# Copyright (C) 2023 Azuk 443 <azukmm@gmail.com>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -21,66 +21,5 @@
# along with this program. If not, see # along with this program. If not, see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
BASEDIR=$(dirname $0) echo "zjunet WLAN function is deprecated."
exit 1
USER="${BASEDIR}/user.sh"
USERNAME=$($USER get)
PASSWORD=$($USER getpwd $USERNAME)
logout() {
USERNAME=$1
PASSWORD=$2
echo "Logout: ${USERNAME}"
RESPONSE=$(curl "https://net.zju.edu.cn/cgi-bin/srun_portal" -H "Content-Type: application/x-www-form-urlencoded" -d "action=logout" -s)
case "${RESPONSE}" in
*ok*)
echo "Logout: success."
;;
*成功*)
echo "Logout: success."
;;
*)
echo "Logout: ${RESPONSE}"
exit 1;
;;
esac
}
login() {
USERNAME=$1
PASSWORD=$2
logout $USERNAME $PASSWORD
echo "Login: ${USERNAME}"
RESPONSE=$(curl "https://net.zju.edu.cn/cgi-bin/srun_portal" -H "Content-Type: application/x-www-form-urlencoded" -d "action=login&username=${USERNAME}&password=${PASSWORD}&ac_id=3&type=1&is_ldap=1&local_auth=1" -s)
case "${RESPONSE}" in
*help.html*)
echo "Login: success."
;;
*login_ok*)
echo "Login: success."
;;
*)
echo "Login: ${RESPONSE}" >&2
exit 1
;;
esac
}
case "$1" in
disconnect)
logout $USERNAME $PASSWORD
;;
-d)
logout $USERNAME $PASSWORD
;;
*)
login $USERNAME $PASSWORD
;;
esac

View File

@ -4,6 +4,7 @@
# #
# Copyright (C) 2014 Zeno Zeng <zenoofzeng@gmail.com> # Copyright (C) 2014 Zeno Zeng <zenoofzeng@gmail.com>
# Copyright (C) 2014 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com> # Copyright (C) 2014 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
# Copyright (C) 2014 Xero Essential <x@xeroe.net || xqyww123@gmail.com>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -18,8 +19,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see # along with this program. If not, see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
#
# RUN AS ROOT! >..< ~~ / by xero ~~~ ararararar ~~~~
LNS="10.5.1.9" LNS="10.5.1.9"
L2TPD_CFG_FILE=/etc/xl2tpd/xl2tpd.conf L2TPD_CFG_FILE=/etc/xl2tpd/xl2tpd.conf
@ -27,7 +26,7 @@ L2TPD_CFG_FILE=/etc/xl2tpd/xl2tpd.conf
USERNAME=$2 USERNAME=$2
PASSWORD=$3 PASSWORD=$3
LAC_NAME=zju-l2tp-${USERNAME} LAC_NAME=zju-l2tp-${USERNAME}
PPP_LOG_FILE=/tmp/zju-l2tp-log PPP_LOG_FILE=/tmp/zju-l2tp-log-${USERNAME}
PPP_OPT_FILE=/etc/ppp/peers/${LAC_NAME} PPP_OPT_FILE=/etc/ppp/peers/${LAC_NAME}
mkdir -p /var/log/zjunet/ mkdir -p /var/log/zjunet/
@ -35,33 +34,29 @@ LOG_FILE=/var/log/zjunet/${USERNAME}
XL2TPD_CONTROL_FILE=/var/run/xl2tpd/l2tp-control XL2TPD_CONTROL_FILE=/var/run/xl2tpd/l2tp-control
type systemctl >/dev/null 2>&1
HAVE_SYSTEMD=$?
xl2tpd_stop() { xl2tpd_stop() {
# for Openwrt / Debian / Ubuntu echo "[INFO] Stopping xl2tpd"
type systemctl >/dev/null 2>&1 || { if [ $HAVE_SYSTEMD -eq 0 ]; then
systemctl stop xl2tpd
else
/etc/init.d/xl2tpd stop /etc/init.d/xl2tpd stop
} fi
# for Arch Linux
type systemctl >/dev/null 2>&1 && {
systemctl xl2tpd stop
}
} }
xl2tpd_start() { xl2tpd_start() {
# for Openwrt / Debian / Ubuntu echo "[INFO] Starting xl2tpd"
type systemctl >/dev/null 2>&1 || { if [ $HAVE_SYSTEMD -eq 0 ]; then
systemctl start xl2tpd
else
/etc/init.d/xl2tpd start /etc/init.d/xl2tpd start
} fi
# for Arch Linux
type systemctl >/dev/null 2>&1 && {
systemctl xl2tpd start
}
# wait until ready # wait until ready
for i in $(seq 0 10); do for i in $(seq 0 10); do
if [ -e ${XL2TPD_CONTROL_FILE} ]; then if [ -e ${XL2TPD_CONTROL_FILE} ] || (type systemctl >/dev/null && systemctl status xl2tpd >/dev/null) ; then
echo "[INFO] xl2tpd ready." echo "[INFO] xl2tpd ready."
return 0 return 0
fi fi
@ -73,7 +68,8 @@ xl2tpd_start() {
} }
xl2tpd_trystart() { xl2tpd_trystart() {
if [ -e ${XL2TPD_CONTROL_FILE} ]; then echo "[INFO] Try to start xl2tpd if not"
if [ -e ${XL2TPD_CONTROL_FILE} ] || (type systemctl >/dev/null && systemctl status xl2tpd >/dev/null); then
echo "[INFO] xl2tpd ready." echo "[INFO] xl2tpd ready."
else else
xl2tpd_start xl2tpd_start
@ -87,7 +83,6 @@ xl2tpd_restart() {
} }
xl2tpd_create_lac() { xl2tpd_create_lac() {
#touch $PPP_LOG_FILE
cat > $PPP_OPT_FILE <<EOF cat > $PPP_OPT_FILE <<EOF
noauth noauth
@ -95,6 +90,7 @@ linkname $LAC_NAME
logfile $PPP_LOG_FILE logfile $PPP_LOG_FILE
name $USERNAME name $USERNAME
password $PASSWORD password $PASSWORD
mtu 1428
EOF EOF
chmod 600 $PPP_OPT_FILE chmod 600 $PPP_OPT_FILE
@ -117,21 +113,20 @@ EOF
} }
xl2tpd_connect() { xl2tpd_connect() {
xl2tpd-control connect $1 echo "[INFO] try connecting $1"
pkill xl2tpd-control > /dev/null
xl2tpd-control connect-lac $1 &
echo "[INFO] xl2tpd-control done"
} }
xl2tpd_disconnect() { xl2tpd_disconnect() {
xl2tpd-control disconnect $1 echo "[INFO] try disconnecting $1"
pkill xl2tpd-control > /dev/null
xl2tpd-control disconnect-lac $1 &
echo "[INFO] xl2tpd-control done"
} }
connect() { xl2tpd_waituser() {
xl2tpd_disconnect ${LAC_NAME}
xl2tpd_connect ${LAC_NAME}
echo -n > $PPP_LOG_FILE
prev_count=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.' | wc -l)
for i in $(seq 0 10000); do for i in $(seq 0 10000); do
tail $PPP_LOG_FILE >> $LOG_FILE tail $PPP_LOG_FILE >> $LOG_FILE
@ -139,18 +134,27 @@ connect() {
then then
echo "[INFO] Connection terminated." echo "[INFO] Connection terminated."
echo -n > $PPP_LOG_FILE echo -n > $PPP_LOG_FILE
echo "[INFO] Retrying now. (force kicking off, may take some time)" echo "[INFO] Retrying now. "
xl2tpd_disconnect ${LAC_NAME}
sleep 1 sleep 1
xl2tpd_disconnect ${LAC_NAME}
sleep 5
xl2tpd_connect ${LAC_NAME} xl2tpd_connect ${LAC_NAME}
echo "[INFO] again"
fi fi
echo -n > $PPP_LOG_FILE echo -n > $PPP_LOG_FILE
count=$(ip addr show | grep 'inet.*ppp' | grep ' 10.5.' | wc -l) for pid in "/var/run/ppp-${LAC_NAME}.pid" \
if [ ${count} -gt ${prev_count} ]; then "/var/run/pppdppp-${LAC_NAME}.pid" \
echo "Bring up ppp, done." "/var/run/pppd/ppp-${LAC_NAME}.pid"; do
return if [ -e $pid ]; then
fi ppp=$(cat $pid | grep ppp)
if ip addr show | grep "inet.*${ppp}" > /dev/null; then
ip addr show | grep "inet.*${ppp}" | sed 's/^ */[VPN] /'
return
fi
break
fi
done
done done
@ -180,8 +184,8 @@ case $1 in
xl2tpd_create_lac xl2tpd_create_lac
;; ;;
connect) waituser)
connect xl2tpd_waituser
;; ;;
disconnect) disconnect)

View File

@ -3,6 +3,7 @@
# zjunet.sh -- router for zjunet # zjunet.sh -- router for zjunet
# #
# Copyright (C) 2014 Zeno Zeng <zenoofzeng@gmail.com> # Copyright (C) 2014 Zeno Zeng <zenoofzeng@gmail.com>
# Copyright (C) 2023 Azuk 443 <azukmm@gmail.com>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -19,55 +20,59 @@
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
BASEDIR=$(dirname $0) BASEDIR=$(dirname $0)
MISCELLDIR="$BASEDIR/../../share/zjunet"
case "$1" in case "$1" in
route) r|route)
"${BASEDIR}/sudo.sh" "${BASEDIR}/route.sh" "${BASEDIR}/sudo.sh" "${BASEDIR}/route.sh"
;; ;;
user) u|user)
"${BASEDIR}/user.sh" $2 "${BASEDIR}/user.sh" $2
;; ;;
all) a|all)
"${BASEDIR}/wlan.sh" $2 "${BASEDIR}/wlan.sh" $2
"${BASEDIR}/vpn.sh" $2 "${BASEDIR}/vpn.sh" $2
;; ;;
wlan) w|wlan)
"${BASEDIR}/wlan.sh" $2 "${BASEDIR}/wlan.sh" $2
;; ;;
vpn) v|vpn)
"${BASEDIR}/vpn.sh" $2 "${BASEDIR}/vpn.sh" $2
;; ;;
dns) d|dns)
"${BASEDIR}/dns.sh" "${BASEDIR}/dns.sh" $2
;; ;;
--version) -v|version|--version)
echo "zjunet version: zjunet-0.1.1" version_full=`cat "${MISCELLDIR}/VERSION"`
version=$(echo $version_full | sed 's/-.*//')
echo "zjunet version: $version (${version_full})"
;; ;;
*) *)
cat <<EOF cat <<EOF
zjunet: CLI Tool (VPN/WLAN/DNS) for Zjuer zjunet: CLI tool (VPN/WLAN/DNS) for network connection in ZJU
Usage: zjunet [ACTION] Usage: zjunet [ACTION]
Actions: Actions:
user user, u
add Add a user add Add a user
edit Edit a (enabled) user list List all enabled users
delete Delete a (enabled) user edit Edit a (enabled) user
list List all enabled users * Note: to delete/disable a user, edit /etc/xl2tpd/xl2tpd.conf
enable Enable a user all, a
disable Disable a user connect, -c Connect VPN & ZJUWLAN, and combine them using nexthop
all disconnect, -d Disconnect VPN & ZJUWLAN
connect(-c) Connect VPN & ZJUWLAN, and combine them using nexthop vpn, v
disconnect(-d) Disconnect VPN & ZJUWLAN connect, -c Connect VPN and set up ip route
vpn disconnect, -d Disconnect VPN and reset ip route
connect(-c) Connect VPN and set up ip route route, r Set up static route
disconnect(-d) Disconnect VPN and reset ip route dns [ip], d [ip] Test and set up DNS Server (default: 10.10.0.21)
wlan version, -v Display program version
connect(-c) Login ZJUWLAN via curl
disconnect(-d) Logout ZJUWLAN via curl Example:
route Set up ip route zjunet user add Add a new user
dns Test and set up DNS Server zjunet vpn -c Connect VPN
zjunet vpn -d Disconnect VPN
EOF EOF
;; ;;
esac esac

16
miscellaneous/zjunet-postinst Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
cat <<BANNER
----------------------------------------------------------------------
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License Version 3 for more details.
You can ask questions, file a bug or make PRs here:
* https://github.com/QSCTech/zjunet
----------------------------------------------------------------------
BANNER

View File

@ -1,4 +1,7 @@
#!/bin/sh #!/bin/sh
rm -rIv /usr/local/lib/zjunet PREFIX=/usr/local
rm -iv /usr/local/bin/zjunet
rm -rIv $PREFIX/lib/zjunet
rm -iv $PREFIX/bin/zjunet
rm -riv $PREFIX/share/zjunet