diff --git a/ALL_README.md b/ALL_README.md
index 3d6c579..a01b345 100644
--- a/ALL_README.md
+++ b/ALL_README.md
@@ -1,6 +1,7 @@
# All available README files by language
- [Read the README in English](README.md)
+- [Irakurri README euskaraz](README_eu.md)
- [Lire le README en français](README_fr.md)
- [Le o README en galego](README_gl.md)
-- [Leggi il “README” in italiano](README_it.md)
+- [阅读中文(简体)的 README](README_zh_Hans.md)
diff --git a/README.md b/README.md
index c91d410..9b1e364 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ It shall NOT be edited by hand.
[![Install Wifi Hotspot with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=hotspot)
-*[Read this README is other languages.](./ALL_README.md)*
+*[Read this README in other languages.](./ALL_README.md)*
> *This package allows you to install Wifi Hotspot quickly and simply on a YunoHost server.*
> *If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.*
diff --git a/README_eu.md b/README_eu.md
new file mode 100644
index 0000000..107765e
--- /dev/null
+++ b/README_eu.md
@@ -0,0 +1,47 @@
+
+
+# Wifi Hotspot YunoHost-erako
+
+[![Integrazio maila](https://dash.yunohost.org/integration/hotspot.svg)](https://dash.yunohost.org/appci/app/hotspot) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/hotspot.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/hotspot.maintain.svg)
+
+[![Instalatu Wifi Hotspot YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=hotspot)
+
+*[Irakurri README hau beste hizkuntzatan.](./ALL_README.md)*
+
+> *Pakete honek Wifi Hotspot YunoHost zerbitzari batean azkar eta zailtasunik gabe instalatzea ahalbidetzen dizu.*
+> *YunoHost ez baduzu, kontsultatu [gida](https://yunohost.org/install) nola instalatu ikasteko.*
+
+## Aurreikuspena
+
+* Broadcast a Wi-Fi access point from your self-hosted server
+* Combine with the [VPN Client app](https://github.com/labriqueinternet/vpnclient_ynh) to obtain a VPN-protected WiFi
+
+
+**Paketatutako bertsioa:** 2.3.1~ynh1
+
+## Pantaila-argazkiak
+
+![Wifi Hotspot(r)en pantaila-argazkia](./doc/screenshots/hotspot.png)
+
+## Dokumentazioa eta baliabideak
+
+- Aplikazioaren webgune ofiziala:
+- YunoHost Denda:
+- Eman errore baten berri:
+
+## Garatzaileentzako informazioa
+
+Bidali `pull request`a [`testing` abarrera](https://github.com/YunoHost-Apps/hotspot_ynh/tree/testing).
+
+`testing` abarra probatzeko, ondorengoa egin:
+
+```bash
+sudo yunohost app install https://github.com/YunoHost-Apps/hotspot_ynh/tree/testing --debug
+edo
+sudo yunohost app upgrade hotspot -u https://github.com/YunoHost-Apps/hotspot_ynh/tree/testing --debug
+```
+
+**Informazio gehiago aplikazioaren paketatzeari buruz:**
diff --git a/README_zh_Hans.md b/README_zh_Hans.md
new file mode 100644
index 0000000..f0aab2c
--- /dev/null
+++ b/README_zh_Hans.md
@@ -0,0 +1,47 @@
+
+
+# YunoHost 的 Wifi Hotspot
+
+[![集成程度](https://dash.yunohost.org/integration/hotspot.svg)](https://dash.yunohost.org/appci/app/hotspot) ![工作状态](https://ci-apps.yunohost.org/ci/badges/hotspot.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/hotspot.maintain.svg)
+
+[![使用 YunoHost 安装 Wifi Hotspot](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=hotspot)
+
+*[阅读此 README 的其它语言版本。](./ALL_README.md)*
+
+> *通过此软件包,您可以在 YunoHost 服务器上快速、简单地安装 Wifi Hotspot。*
+> *如果您还没有 YunoHost,请参阅[指南](https://yunohost.org/install)了解如何安装它。*
+
+## 概况
+
+* Broadcast a Wi-Fi access point from your self-hosted server
+* Combine with the [VPN Client app](https://github.com/labriqueinternet/vpnclient_ynh) to obtain a VPN-protected WiFi
+
+
+**分发版本:** 2.3.1~ynh1
+
+## 截图
+
+![Wifi Hotspot 的截图](./doc/screenshots/hotspot.png)
+
+## 文档与资源
+
+- 官方应用网站:
+- YunoHost 商店:
+- 报告 bug:
+
+## 开发者信息
+
+请向 [`testing` 分支](https://github.com/YunoHost-Apps/hotspot_ynh/tree/testing) 发送拉取请求。
+
+如要尝试 `testing` 分支,请这样操作:
+
+```bash
+sudo yunohost app install https://github.com/YunoHost-Apps/hotspot_ynh/tree/testing --debug
+或
+sudo yunohost app upgrade hotspot -u https://github.com/YunoHost-Apps/hotspot_ynh/tree/testing --debug
+```
+
+**有关应用打包的更多信息:**
diff --git a/conf/openvpn_90-hotspot b/conf/openvpn_90-hotspot
deleted file mode 100644
index 1fc4dd0..0000000
--- a/conf/openvpn_90-hotspot
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-is_nat_set() {
- local gateway_interface=${1}
- iptables -w -nvt nat -L POSTROUTING | grep MASQUERADE | grep -q "${gateway_interface}"
-}
-
-unset_nat() {
- local gateway_interface=${1}
- iptables -w -t nat -D POSTROUTING -o "${gateway_interface}" -j MASQUERADE
-}
-
-set_nat() {
- local gateway_interface=${1}
- iptables -w -t nat -A POSTROUTING -o "${gateway_interface}" -j MASQUERADE
-}
-
-ynh_hotspot_state=$(systemctl is-active __SERVICE_NAME__)
-if [[ "${ynh_hotspot_state}" == "active" || "${ynh_hotspot_state}" == "activating" ]]; then
- old_gateway_interface=$(yunohost app setting __APP__ gateway_interface)
- new_gateway_interface=$(ip route get 1.2.3.4 | awk '{ print $5; }')
-
- if [[ -n "$old_gateway_interface" ]] && [[ "$old_gateway_interface" != "$new_gateway_interface" ]] && is_nat_set "$old_gateway_interface"; then
- unset_nat "${old_gateway_interface}"
- fi
-
- if [[ -n "$new_gateway_interface" ]] && ! is_nat_set $new_gateway_interface; then
- set_nat "${new_gateway_interface}"
- fi
-
- yunohost app setting __APP__ gateway_interface --value "${new_gateway_interface}"
-fi
diff --git a/conf/openvpn_route-down_90-hotspot b/conf/openvpn_route-down_90-hotspot
new file mode 100644
index 0000000..79a3290
--- /dev/null
+++ b/conf/openvpn_route-down_90-hotspot
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+is_nat_set() {
+ local gateway_interface=${1}
+ iptables -w -nvt nat -L POSTROUTING | grep MASQUERADE | grep -q "${gateway_interface}"
+}
+
+unset_nat() {
+ local gateway_interface=${1}
+ echo "[INFO] hotspot ${wifi_device}: Unset NAT on ${gateway_interface}"
+ iptables -w -t nat -D POSTROUTING -o "${gateway_interface}" -j MASQUERADE
+}
+
+set_nat() {
+ local gateway_interface=${1}
+ echo "[INFO] hotspot ${wifi_device}: Set NAT on ${gateway_interface}"
+ iptables -w -t nat -A POSTROUTING -o "${gateway_interface}" -j MASQUERADE
+}
+
+has_ip6delegatedprefix() {
+ [[ -n "${ip6_net}" ]] && [[ "${ip6_net}" != "none" ]]
+}
+
+is_ip6addr_set() {
+ ip address show dev "${wifi_device}" 2>/dev/null | grep -q "${ip6_addr}/64"
+}
+
+unset_ip6addr() {
+ echo "[INFO] hotspot ${wifi_device}: Unset IPv6 address ${ip6_addr}"
+ ip address delete "${ip6_addr}/64" dev "${wifi_device}"
+}
+
+ynh_hotspot_state=$(systemctl is-active __SERVICE_NAME__)
+if [[ "${ynh_hotspot_state}" == "active" || "${ynh_hotspot_state}" == "activating" ]]; then
+ old_gateway_interface=${dev}
+ new_gateway_interface=$(ip route | awk '/default via/ { print $5; }')
+
+ ip6_net=$(yunohost app setting __APP__ ip6_net)
+ ip6_addr="${ip6_net}1"
+
+ wifi_device=$(yunohost app setting __APP__ wifi_device)
+
+ if is_nat_set "${old_gateway_interface}"; then
+ unset_nat "${old_gateway_interface}"
+ fi
+
+ if [[ -n "$new_gateway_interface" ]] && ! is_nat_set $new_gateway_interface; then
+ set_nat "${new_gateway_interface}"
+ fi
+
+ if has_ip6delegatedprefix && is_ip6addr_set; then
+ unset_ip6addr
+ fi
+
+ yunohost app setting __APP__ gateway_interface --value "${new_gateway_interface}"
+fi
diff --git a/conf/openvpn_route-up_90-hotspot b/conf/openvpn_route-up_90-hotspot
new file mode 100644
index 0000000..b22edc9
--- /dev/null
+++ b/conf/openvpn_route-up_90-hotspot
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+is_nat_set() {
+ local gateway_interface=${1}
+ iptables -w -nvt nat -L POSTROUTING | grep MASQUERADE | grep -q "${gateway_interface}"
+}
+
+unset_nat() {
+ local gateway_interface=${1}
+ echo "[INFO] hotspot ${wifi_device}: Unset NAT on ${gateway_interface}"
+ iptables -w -t nat -D POSTROUTING -o "${gateway_interface}" -j MASQUERADE
+}
+
+set_nat() {
+ local gateway_interface=${1}
+ echo "[INFO] hotspot ${wifi_device}: Set NAT on ${gateway_interface}"
+ iptables -w -t nat -A POSTROUTING -o "${gateway_interface}" -j MASQUERADE
+}
+
+has_ip6delegatedprefix() {
+ [[ -n "${ip6_net}" ]] && [[ "${ip6_net}" != "none" ]]
+}
+
+is_ip6addr_set() {
+ ip address show dev "${wifi_device}" 2>/dev/null | grep -q "${ip6_addr}/64"
+}
+
+set_ip6addr() {
+ echo "[INFO] hotspot ${wifi_device}: Set IPv6 address ${ip6_addr}"
+ ip address delete "${ip6_addr}/64" dev "${new_gateway_interface}" &>/dev/null
+ ip address add "${ip6_addr}/64" dev "${wifi_device}"
+}
+
+ynh_hotspot_state=$(systemctl is-active __SERVICE_NAME__)
+if [[ "${ynh_hotspot_state}" == "active" || "${ynh_hotspot_state}" == "activating" ]]; then
+ old_gateway_interface=$(ip route | awk '/default via/ { print $5; }')
+ new_gateway_interface=${dev}
+
+ ip6_net=$(yunohost app setting __APP__ ip6_net)
+ ip6_addr="${ip6_net}1"
+
+ wifi_device=$(yunohost app setting __APP__ wifi_device)
+
+ if [[ -n "$old_gateway_interface" ]] && is_nat_set "$old_gateway_interface"; then
+ unset_nat "${old_gateway_interface}"
+ fi
+
+ if ! is_nat_set $new_gateway_interface; then
+ set_nat "${new_gateway_interface}"
+ fi
+
+ if has_ip6delegatedprefix && ! is_ip6addr_set; then
+ set_ip6addr
+ fi
+
+ yunohost app setting __APP__ gateway_interface --value "${new_gateway_interface}"
+fi
diff --git a/conf/ynh-hotspot b/conf/ynh-hotspot
index d55456f..236626d 100644
--- a/conf/ynh-hotspot
+++ b/conf/ynh-hotspot
@@ -26,10 +26,6 @@ has_ip6delegatedprefix() {
[[ -n "${ip6_net}" ]] && [[ "${ip6_net}" != "none" ]]
}
-ip6addrfromdelegatedprefix() {
- echo "${ip6_net}1"
-}
-
is_nat_set() {
local gateway_interface=${1}
iptables -w -nvt nat -L POSTROUTING | grep MASQUERADE | grep -q "${gateway_interface}"
@@ -40,7 +36,7 @@ is_ip4nataddr_set() {
}
is_ip6addr_set() {
- ip address show dev "${wifi_device}" 2>/dev/null | grep -q "$(ip6addrfromdelegatedprefix)/64"
+ ip address show dev "${wifi_device}" 2>/dev/null | grep -q "${ip6_addr}/64"
}
is_ip6firewall_set() {
@@ -122,10 +118,10 @@ set_ipaddr() {
ip address add "${ip4_nat_prefix}.1/24" dev "${wifi_device}"
fi
- if has_ip6delegatedprefix && ! is_ip6addr_set; then
- echo "hotspot ${wifi_device}: Set IPv6 address"
- ip address delete "$(ip6addrfromdelegatedprefix)/64" dev tun0 &>/dev/null
- ip address add "$(ip6addrfromdelegatedprefix)/64" dev "${wifi_device}"
+ if has_ip6delegatedprefix && ! is_ip6addr_set && ip route get 1.2.3.4 | grep -q tun0; then
+ echo "hotspot ${wifi_device}: Set IPv6 address ${ip6_addr}"
+ ip address delete "${ip6_addr}/64" dev tun0 &>/dev/null
+ ip address add "${ip6_addr}/64" dev "${wifi_device}"
fi
}
@@ -140,8 +136,17 @@ set_ipfirewall() {
}
set_forwarding() {
+ local ip6_gateway=$(ip -6 route | awk '/default via/ { print $3; }')
+ local wired_interface=$(ip -6 route | awk '/default via/ { print $5; }')
+
sysctl -w net.ipv6.conf.all.forwarding=1 >/dev/null
sysctl -w net.ipv4.conf.all.forwarding=1 >/dev/null
+
+ if [[ -n "${ip6_gateway}" ]]; then
+ # Enabling IPv6 forwarding removes the default route, so we need to add it back.
+ # See https://askubuntu.com/questions/463625/ipv6-forwarding-kills-ipv6-connection/463654#463654
+ ip route add default via "${ip6_gateway}" dev ${wired_interface}
+ fi
}
start_dhcpd() {
@@ -178,8 +183,8 @@ unset_ipaddr() {
fi
if has_ip6delegatedprefix && is_ip6addr_set; then
- echo "hotspot ${wifi_device}: Unset IPv6 address"
- ip address delete "$(ip6addrfromdelegatedprefix)/64" dev "${wifi_device}"
+ echo "hotspot ${wifi_device}: Unset IPv6 address ${ip6_addr}"
+ ip address delete "${ip6_addr}/64" dev "${wifi_device}"
fi
}
@@ -232,6 +237,7 @@ if [ "$1" != restart ]; then
ip6_firewall=$(ynh_app_setting_get --app=$app --key=ip6_firewall)
ip6_dns=$(ynh_app_setting_get --app=$app --key=ip6_dns)
ip6_net=$(ynh_app_setting_get --app=$app --key=ip6_net)
+ ip6_addr="${ip6_net}1"
ip4_dns=$(ynh_app_setting_get --app=$app --key=ip4_dns)
ip4_nat_prefix=$(ynh_app_setting_get --app=$app --key=ip4_nat_prefix)
@@ -376,7 +382,7 @@ status)
if has_ip6delegatedprefix; then
echo "[INFO] hotspot ${wifi_device}: IPv6 delegated prefix found"
- echo "[INFO] hotspot ${wifi_device}: IPv6 address computed from the delegated prefix: $(ip6addrfromdelegatedprefix)"
+ echo "[INFO] hotspot ${wifi_device}: IPv6 address computed from the delegated prefix: ${ip6_addr}"
if is_ip6addr_set; then
echo "[ OK ] hotspot ${wifi_device}: IPv6 address set"
diff --git a/scripts/install b/scripts/install
index 451d9ad..b79f359 100644
--- a/scripts/install
+++ b/scripts/install
@@ -113,8 +113,8 @@ chmod 0755 "/usr/local/bin/$service_name"
mkdir -pm 0755 /etc/openvpn/scripts
mkdir -pm 0755 /etc/openvpn/scripts/route-up.d
mkdir -pm 0755 /etc/openvpn/scripts/route-down.d
-ynh_add_config --template="../conf/openvpn_90-hotspot" --destination="/etc/openvpn/scripts/route-up.d/90-$service_name"
-ynh_add_config --template="../conf/openvpn_90-hotspot" --destination="/etc/openvpn/scripts/route-down.d/90-$service_name"
+ynh_add_config --template="../conf/openvpn_route-up_90-hotspot" --destination="/etc/openvpn/scripts/route-up.d/90-$service_name"
+ynh_add_config --template="../conf/openvpn_route-down_90-hotspot" --destination="/etc/openvpn/scripts/route-down.d/90-$service_name"
chmod 0755 "/etc/openvpn/scripts/route-up.d/90-${service_name}"
chmod 0755 "/etc/openvpn/scripts/route-down.d/90-${service_name}"
diff --git a/scripts/upgrade b/scripts/upgrade
index fb92cc1..545b60b 100644
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -174,8 +174,8 @@ chmod 0755 "/usr/local/bin/$service_name"
mkdir -pm 0755 /etc/openvpn/scripts
mkdir -pm 0755 /etc/openvpn/scripts/route-up.d
mkdir -pm 0755 /etc/openvpn/scripts/route-down.d
-ynh_add_config --template="../conf/openvpn_90-hotspot" --destination="/etc/openvpn/scripts/route-up.d/90-$service_name"
-ynh_add_config --template="../conf/openvpn_90-hotspot" --destination="/etc/openvpn/scripts/route-down.d/90-$service_name"
+ynh_add_config --template="../conf/openvpn_route-up_90-hotspot" --destination="/etc/openvpn/scripts/route-up.d/90-$service_name"
+ynh_add_config --template="../conf/openvpn_route-down_90-hotspot" --destination="/etc/openvpn/scripts/route-down.d/90-$service_name"
chmod 0755 "/etc/openvpn/scripts/route-up.d/90-${service_name}"
chmod 0755 "/etc/openvpn/scripts/route-down.d/90-${service_name}"