Giter Club home page Giter Club logo

openvpn-easy-setup's Introduction

OpenVPN-easy-setup

Bash script for easy and fast OpenVPN server deploy

For CentOS 7.x and Ubuntu Server 17.x only. (Ubuntu Server 16.x is supported, but it have OpenVPN 2.3.x) Use only on fresh installed machine. It will rewrite your iptables and OpenVPN configuration.

Features:

  • Setup new server with one command in a couple of minutes;
  • Creates client config in unified format;
  • Choose of port and protocol;
  • Choose of cipher;
  • IPv6 support.

Usage: ./openvpnsetup.sh

Before enabling IPv6 support ensure that your machine have IPv6 address. Note: iptables rule allow port 22 tcp (ssh) by default, if you have sshd on another port modify script before execution.

After script is complete you can create client config files in unified format with /etc/openvpn/newclient.sh script. Usage: ./newclient.sh clientname Config file will be saved to /etc/openvpn/bundles/clientname.ovpn and it ready to use (even on mobile device).

openvpn-easy-setup's People

Contributors

xl-tech avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openvpn-easy-setup's Issues

Ubuntu 16.04

Server config script reports "yay!", but services start fail here
https://github.com/xl-tech/OpenVPN-easy-setup/blob/master/openvpnsetup.sh#L360-L362
Clean ubuntu box,

root@3237:~# ./openvpnsetup.sh
TUN/TAP is enabled
IPv4 forwarding is already enabled
NAME="Ubuntu"
Reading package lists... Done
Building dependency tree
Reading state information... Done
iptables is already the newest version (1.6.0-2ubuntu3).
easy-rsa is already the newest version (2.2.2-2).
iptables-persistent is already the newest version (1.0.4).
netfilter-persistent is already the newest version (1.0.4).
curl is already the newest version (7.47.0-1ubuntu2.2).
openssl is already the newest version (1.0.2g-1ubuntu4.8).
openvpn is already the newest version (2.3.10-1ubuntu2.1).
0 upgraded, 0 newly installed, 0 to remove and 144 not upgraded.
./openvpnsetup.sh: line 50: ufw: command not found
Select server IP to listen on (only used for IPv4):
1) Internal IP - 192.168.102.64 2001:41d0:1:777c:200:c0a8:6640:0  (in case you are behind NAT)
2) External IP - 87.250.250.242

1
Select server PORT to listen on:
1) tcp 443 (recommended)
2) udp 1194 (default)
3) Enter manually (proto (lowercase!) port)

3
Enter proto and port (like tcp 80 or udp 53): tcp 51262
Select server cipher:
1) AES-256-GCM (default for OpenVPN 2.4.x, not supported by Ubuntu Server 16.x)
2) AES-256-CBC
3) AES-128-CBC (default for OpenVPN 2.3.x)
4) BF-CBC (insecure)

3
Enable IPv6? (ensure that your machine have IPv6 support):
1) Yes
2) No

2
Check your selection
Server will listen on 192.168.102.64 2001:41d0:1:777c:200:c0a8:6640:0
Server will listen on tcp 51262
Server will use AES-128-CBC cipher
IPv6 - 0 (1 is enabled, 0 is disabled)
Press enter to continue...
mkdir: cannot create directory '/etc/openvpn/easy-rsa': File exists
mkdir: cannot create directory '/etc/openvpn/easy-rsa/keys': File exists
mkdir: cannot create directory '/etc/openvpn/logs': File exists
mkdir: cannot create directory '/etc/openvpn/bundles': File exists
mkdir: cannot create directory '/etc/openvpn/ccd': File exists
NAME="Ubuntu"
Using CA Common Name: Fort-Funston CA
Generating a 2048 bit RSA private key
....................................................+++
.....................+++
writing new private key to 'ca.key'
-----
Generating a 2048 bit RSA private key
.............................................................+++
.......................+++
writing new private key to 'server-cert.key'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'Fort-Funston'
organizationalUnitName:PRINTABLE:'MyVPN'
commonName            :PRINTABLE:'server-cert'
name                  :PRINTABLE:'EasyRSA'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Aug 15 08:43:21 2022 GMT (1825 days)
failed to update database
TXT_DB error number 2
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.............................................+.....................+..................................................................................................................................................................................................................................................................+....................................................................................+..............................+........+.......................................................................................................................................................................................................................................................................................................................................................................................+......................................................+...............................+...+...+..............................................................+.........................+..............................+......................+..........................................................................................................+...........+...................................................................................................................................+.................................+....................................................................................+..............................+.....................................+......................................................................................................+....................................................................+..........................................................................................+......+.....................................................................................................................................................+......+.........................................................+.............+............................................................................+........................................................................................................................................................................................................................................+.......................................+............................................+...................................................................................................................................+..........................................................................................+....................................................+.................................................................................................................................................................................................................................................+....................................................................................................................................................+...........................+.............................................................................+............................................................................+....................................................................................+..............................................................................................+..........................+....................................................................................................................................................................................................................+.........................................................................................................................................+......................................................................................................................................................+.............+..........................................................................+........................................................................................................................+..................................................................................................................................................................................................................................................................................................................................................................................................................................................+...............................................................................+...........................+...........................+........................+................................+..................................................................................................................................................+.............................................................................................................................+...........+........................................+...........................................................................................................................................................................................................................................................................+.......................................................................................................................................................................................................................................................................................................................+...............................+..................................................................................................................................................................................+...........................................................................................................................................+..........................................................+........................+................................................+....+................................+..............................................+..........................................................................................+.............................+.......................................................................................................+..........................................+.......................................................................................................................................................................................................................................+......................................++*++*
Generating a 2048 bit RSA private key
...........................................................................................................................................+++
...........................+++
writing new private key to 'revoked.key'
-----
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'Fort-Funston'
organizationalUnitName:PRINTABLE:'MyVPN'
commonName            :PRINTABLE:'revoked'
name                  :PRINTABLE:'EasyRSA'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Aug 15 08:44:57 2022 GMT (1825 days)

Write out database with 1 new entries
Data Base Updated
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Revoking Certificate 02.
Data Base Updated
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
revoked.crt: C = US, ST = CA, L = SanFrancisco, O = Fort-Funston, OU = MyVPN, CN = revoked, name = EasyRSA, emailAddress = [email protected]
error 23 at 0 depth lookup:certificate revoked
Error 23 indicates that revoke is successful
OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 22 2017
NAME="Ubuntu"
Synchronizing state of netfilter-persistent.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable netfilter-persistent
Job for netfilter-persistent.service failed because the control process exited with error code. See "systemctl status netfilter-persistent.service" and "journalctl -xe" for details.
Job for [email protected] failed because the control process exited with error code. See "systemctl status [email protected]" and "journalctl -xe" for details.
Job for netfilter-persistent.service failed because the control process exited with error code. See "systemctl status netfilter-persistent.service" and "journalctl -xe" for details.
Setup is complete. Happy VPNing!
Use /etc/openvpn/newclient.sh to generate client config

journalctl -xe output:

Aug 16 04:47:14 3237 systemd[1]: Starting OpenVPN connection to server...
-- Subject: Unit [email protected] has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit [email protected] has begun starting up.
Aug 16 04:47:14 3237 systemd[1]: Reloading.
Aug 16 04:47:14 3237 systemd[1]: [/lib/systemd/system/vzfifo.service:19] Support for option SysVStartPriority= has been removed and it is ignored
Aug 16 04:47:14 3237 systemd[1]: Reloading.
Aug 16 04:47:14 3237 systemd[1]: [/lib/systemd/system/vzfifo.service:19] Support for option SysVStartPriority= has been removed and it is ignored
Aug 16 04:47:14 3237 systemd[1]: [email protected]: Control process exited, code=exited status=1
Aug 16 04:47:14 3237 systemd[1]: Failed to start OpenVPN connection to server.
-- Subject: Unit [email protected] has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit [email protected] has failed.
--
-- The result is failed.
Aug 16 04:47:14 3237 systemd[1]: [email protected]: Unit entered failed state.
Aug 16 04:47:14 3237 systemd[1]: [email protected]: Failed with result 'exit-code'.
Aug 16 04:47:14 3237 systemd[1]: Stopped netfilter persistent configuration.
-- Subject: Unit netfilter-persistent.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit netfilter-persistent.service has finished shutting down.
Aug 16 04:47:14 3237 systemd[1]: Starting netfilter persistent configuration...
-- Subject: Unit netfilter-persistent.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit netfilter-persistent.service has begun starting up.
Aug 16 04:47:14 3237 netfilter-persistent[4679]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Aug 16 04:47:14 3237 netfilter-persistent[4679]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Aug 16 04:47:14 3237 netfilter-persistent[4679]: run-parts: /usr/share/netfilter-persistent/plugins.d/25-ip6tables exited with return code 2
Aug 16 04:47:14 3237 systemd[1]: netfilter-persistent.service: Main process exited, code=exited, status=1/FAILURE
Aug 16 04:47:14 3237 systemd[1]: Failed to start netfilter persistent configuration.
-- Subject: Unit netfilter-persistent.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit netfilter-persistent.service has failed.
--
-- The result is failed.
Aug 16 04:47:14 3237 systemd[1]: netfilter-persistent.service: Unit entered failed state.
Aug 16 04:47:14 3237 systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
Aug 16 04:47:14 3237 systemd[1]: Reloading.
Aug 16 04:47:14 3237 systemd[1]: [/lib/systemd/system/vzfifo.service:19] Support for option SysVStartPriority= has been removed and it is ignored
Aug 16 04:47:14 3237 systemd[1]: Reloading.
Aug 16 04:47:14 3237 systemd[1]: [/lib/systemd/system/vzfifo.service:19] Support for option SysVStartPriority= has been removed and it is ignored

Iptables rules

Help me please with iptables rule for nginx 80 port. After installation 80 port is not available.

-A INPUT -j XL-Firewall-1-INPUT
-A FORWARD -j XL-Firewall-1-INPUT
-A XL-Firewall-1-INPUT -p icmp --icmp-type any -s localhost -j ACCEPT
-A XL-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A XL-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A XL-Firewall-1-INPUT -m state --state NEW -m $PORTL -p $PORTL --dport $PORTN -j ACCEPT
-A XL-Firewall-1-INPUT -i tun+ -j ACCEPT
-A XL-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

Didn't install correctly on CentOS 7

OS: CentOS Linux 7 (Core) x86_64
Kernel: 2.6.32-042stab127.2

-bash-4.2# ./openvpnsetup.sh 
TUN/TAP is enabled
IPv4 forwarding is already enabled
NAME="CentOS Linux"
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.linux.edu.lv
 * epel: mirror.bacloud.com
 * extras: centos.linux.edu.lv
 * updates: centos.linux.edu.lv
Package epel-release-7-11.noarch already installed and latest version
Nothing to do
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.linux.edu.lv
 * epel: mirror.vpsnet.com
 * extras: centos.linux.edu.lv
 * updates: centos.linux.edu.lv
Package 1:openssl-1.0.2k-8.el7.x86_64 already installed and latest version
Package iptables-1.4.21-18.3.el7_4.x86_64 already installed and latest version
Package curl-7.29.0-42.el7_4.1.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package easy-rsa.noarch 0:3.0.3-1.el7 will be installed
---> Package iptables-services.x86_64 0:1.4.21-18.3.el7_4 will be installed
---> Package openvpn.x86_64 0:2.4.5-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

<...>
   
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction

<...>

Installed:
easy-rsa.noarch 0:3.0.3-1.el7
iptables-services.x86_64 0:1.4.21-18.3.el7_4
openvpn.x86_64 0:2.4.5-1.el7                        

Complete!
Failed to execute operation: No such file or directory
Failed to stop firewalld.service: Unit firewalld.service not loaded.
Select server IP to listen on (only used for IPv4):
1) Internal IP - 127.0.0.1 xxx.xxx.xxx.xxx 10.8.0.1 xxxx:xxxx:xxxx::xxxx:xxxx  (in case you are behind NAT)
2) External IP - xxx.xxx.xxx.xxx

2
Select server PORT to listen on:
1) tcp 443 (recommended)
2) udp 1194 (default)
3) Enter manually (proto (lowercase!) port)

2
Select server cipher:
1) AES-256-GCM (default for OpenVPN 2.4.x, not supported by Ubuntu Server 16.x)
2) AES-256-CBC
3) AES-128-CBC (default for OpenVPN 2.3.x)
4) BF-CBC (insecure)

3
Enable IPv6? (ensure that your machine have IPv6 support):
1) Yes
2) No

1
Check your selection
Server will listen on xxx.xxx.xxx.xxx
Server will listen on udp 1194
Server will use AES-128-CBC cipher
IPv6 - 1 (1 is enabled, 0 is disabled)
Press enter to continue...
NAME="CentOS Linux"
cp: cannot stat '/usr/share/easy-rsa/2.0/*': No such file or directory
./openvpnsetup.sh: line 145: /etc/openvpn/easy-rsa/whichopensslcnf: No such file or directory
./openvpnsetup.sh: line 163: /etc/openvpn/easy-rsa/pkitool: No such file or directory
./openvpnsetup.sh: line 166: /etc/openvpn/easy-rsa/pkitool: No such file or directory
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time

<...>

./openvpnsetup.sh: line 172: /etc/openvpn/easy-rsa/pkitool: No such file or directory
./openvpnsetup.sh: line 173: /etc/openvpn/easy-rsa/revoke-full: No such file or directory
Error 23 indicates that revoke is successful
net.ipv6.conf.all.forwarding = 0
net.ipv6.conf.all.forwarding = 1
cat: /etc/openvpn/easy-rsa/keys/ca.crt: No such file or directory
cat: /etc/openvpn/easy-rsa/keys/server-cert.crt: No such file or directory
cat: /etc/openvpn/easy-rsa/keys/server-cert.key: No such file or directory
NAME="CentOS Linux"
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
Created symlink from /etc/systemd/system/basic.target.wants/ip6tables.service to /usr/lib/systemd/system/ip6tables.service.
Job for ip6tables.service failed because the control process exited with error code. See "systemctl status ip6tables.service" and "journalctl -xe" for details.
Job for ip6tables.service failed because the control process exited with error code. See "systemctl status ip6tables.service" and "journalctl -xe" for details.
Setup is complete. Happy VPNing!
Use /etc/openvpn/newclient.sh to generate client config
-bash-4.2# systemctl status ip6tables.service
● ip6tables.service - IPv6 firewall with ip6tables
   Loaded: loaded (/usr/lib/systemd/system/ip6tables.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Sun 2018-04-01 01:59:39 MDT; 1min ago
  Process: 5991 ExecStart=/usr/libexec/iptables/ip6tables.init start (code=exited, status=1/FAILURE)
 Main PID: 5991 (code=exited, status=1/FAILURE)

Apr 01 01:59:39 xyz.vps.yourserver.se systemd[1]: Starting IPv6 firewall with ip6tables...
Apr 01 01:59:39 xyz.vps.yourserver.se ip6tables.init[5991]: ip6tables: Applying firewall rules: ip6tables-restore v1.4.21: ip6tables-restore: unable to initialize table 'nat'
Apr 01 01:59:39 xyz.vps.yourserver.se ip6tables.init[5991]: Error occurred at line: 22
Apr 01 01:59:39 xyz.vps.yourserver.se ip6tables.init[5991]: Try `ip6tables-restore -h' or 'ip6tables-restore --help' for more information.
Apr 01 01:59:39 xyz.vps.yourserver.se systemd[1]: ip6tables.service: main process exited, code=exited, status=1/FAILURE
Apr 01 01:59:39 xyz.vps.yourserver.se ip6tables.init[5991]: [FAILED]
Apr 01 01:59:39 xyz.vps.yourserver.se systemd[1]: Failed to start IPv6 firewall with ip6tables.
Apr 01 01:59:39 xyz.vps.yourserver.se systemd[1]: Unit ip6tables.service entered failed state.
Apr 01 01:59:39 xyz.vps.yourserver.se systemd[1]: ip6tables.service failed.

support VPS under OpenVZ

Please add support for VPS under OpenVZ. My provider allow tun/tap interface but this script doesn't support install on openVZ. Thanks

Не работает с несколькими клиентами

Привет, нашел твой скрипт еще на хабре, но спросить там не смог, поэтому спрашиваю тут.
Я настроил openvpn сервер твоим скриптом и вроде как все заработало сразу, но когда я добавил еще двух пользователей с Windows 7 то столкнулся с проблемой, локальная сеть есть, а доступа к интернету у них нет. Из трёх клиентов, доступ в интернет есть только у первого, все клиенты на windows 7, все подключаются и получают ip, пробовал подключать их с двух разных провайдеров, ничего не меняется. В чем может быть проблема?

Certificates expire too soon

I suddenly was unable to connect to the VPN, and found out the reason is that the certificates have expired. This means I have to generate new configurations for all staff very frequently. Please add a setting where we can define the validity period of the certificates.

broken .ovpn

openvpn --config client.ovpn

Tue Apr 24 19:25:56 2018 Unrecognized option or missing parameter(s) in client.ovpn:11: block-outside-dns (2.3.10)
Tue Apr 24 19:25:56 2018 Unrecognized option or missing parameter(s) in client.ovpn:38: block-outside-dns (2.3.10)
Tue Apr 24 19:25:56 2018 OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 22 2017
Tue Apr 24 19:25:56 2018 library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Tue Apr 24 19:25:56 2018 WARNING: --ping should normally be used with --ping-restart or --ping-exit
Tue Apr 24 19:25:56 2018 Cannot load inline certificate file: error:0906D06C:PEM routines:PEM_read_bio:no start line: error:140AD009:SSL routines:SSL_CTX_use_certificate_file:PEM lib
Tue Apr 24 19:25:56 2018 Exiting due to fatal error

openvpn --version

OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jun 22 2017
library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <[email protected]>
Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_maintainer_mode=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_silent_rules=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=yes enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_mem_check=no with_plugindir='${prefix}/lib/openvpn' with_sysroot=no

it can't normal work.

i am install it at Ubuntu 17.0.4, vpn is up. but i can't via the vpn go to internet sites. should iptables has wrong. client using pfsense's openvpn.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.