Metadata-Version: 2.1
Name: aliddns2
Version: 0.1.1
Summary: Aliyun DDNS client
Home-page: UNKNOWN
Author: rfancn
Maintainer: catroll
License: GPL
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Requires: requests
Requires: netifaces
Description-Content-Type: text/markdown

# AliDDNS

阿里云 Python DDNS 客户端 (<https://github.com/kalixi/AliDDNS>)

PS: Fork from <https://github.com/rfancn/aliyun-ddns-client>.

中文 | [English](README.md)

## 限制

本版本的 DDNS client只支持自动更新 “A” 类型 IPv4 地址的 DomainRecord。

其他类型不支持，因为它们需要以下值格式，而不是IP地址:

- `NS`, `MX`, `CNAME` 类型 DomainRecord 需要域名格式值
- `AAAA` 类型 DomainRecord 需要 IPv6 地址格式的值
- `SRV` 类型 DomainRecord 需要 `名称.协议` 格式的值
- `显式URL` 和 `隐式URL` 需要 URL 格式值

## 先决条件

下面是 AliDDNS 需要的一些第三方 python 库，你可以通过 pip 或 easy_install 安装:

- requests
- netifaces

例如:

```sh
pip install requests netifaces
```

## 安装

### 1. 使用 cron

1. 下载所有文件到某个地方, 例如: `/opt/aliddns`
2. 将 `ddns.conf.example` 重命名为 `ddns.conf`
3. 创建一个 cron 任务，定时执行 `python ddns.py`, 例如:

    ```sh
    */5 * * * * cd /opt/aliddns && /usr/bin/python ddns.py
    ```

4. 确保 cron 用户可以访问 `ddns.conf`

### 2. 使用 SystemD

1. 下载所有文件到某个地方, 例如: `/root/tools/aliddns`
2. 将 `ddns.conf.example` 重命名为 `ddns.conf`
3. 复制 `ddns.timer` 和 `ddns.service` 到 `/usr/lib/systemd/system`
4. 执行:

    ```sh
    root@local# systemctl daemon-reload
    root@local# systemctl start ddns.timer
    root@local# systemctl status ddns.timer -l
    ```

## 配置

`/etc/ddns.conf` 中需要设置的选项:

- access_id
- access_key
- domain
- sub_domain

可选的选项:

- type

```ini
[DEFAULT]
# access id obtains from aliyun
access_id =
# access key obtains from aliyun
access_key =
# it is not used at this moment, you can just ignore it
interval = 600

[DomainRecord1]
# domain name, like google.com
domain =
# subdomain name, like www, blog, bbs, *, @, ...
sub_domain =
# resolve type, 'A', 'AAAA'..., currently it only supports 'A'
type = A

[feature_public_ip_from_nic]
enable = false
interface = eth0
```

## 开始使用

1. 在阿里云控制台手动创建 DNS 解析条目，例如: `blog.guanxigo.com`
2. 您可以在阿里云服务器上为该条目留下任何IP地址，如 192.168.0.1
3. 确保所有必需的选项都正确输入到 `ddns.conf`
4. 启用您想要使用的功能
5. 确保 `ddns.conf` 对于设置cron作业的用户来说是可读的

**注意**: 只更新本地配置文件和阿里云服务器中定义的域记录。

## 常见问题

- **问**: 为什么报错 `The input parameter "Timestamp" that is mandatory for processing this request is not supplied.`?
    **答**: 请检查参数 TimeStamp 的值是多少, 如果与正确时间相差较大，需要使用 `ntpdate` 将系统时间同步到正确的时间。
- **问**: 为什么报错 `Failed to save the config value`?
    **答**: 您需要确保当前的 cron 用户有权限写 `/etc/ddns.conf` 文件。
- **问**: 为什么报错 `AttributeError: 'X509' object has no attribute '_x509'`?
    **答**：PyOpenSSL 版本需要 >= 0.14，你可以尝试通过以下方法解决这个问题:

    ```sh
    sudo yum uninstall python-requests
    sudo pip uninstall pyopenssl cryptography requests
    sudo pip install requests
    ```


