MogDB如何配置IPv6?

openGauss/MogDB支援多種網路介面,假如我們想在支援IPv6的網路上部署使用,只需簡單操作即可,本文將介紹在CentOS上如何配置使用。

關於IPv6

IPv6(Internet Protocol Version 6),是Internet Engineering Task Force (IETF)設計用於替代IPv4的下一代IP協議,使用IPv6能解決網路地址資源數量的問題。

我們使用ipconfig /all命令檢視windows網路介面,會看到IPv6地址。

乙太網介面卡 乙太網 7:

本地連結 IPv6 地址。 。 。 。 。 。 。 。 : fe80::828a:5e20:53cb:7719%6(首選)

IPv4 地址 。 。 。 。 。 。 。 。 。 。 。 。 : 192。168。137。68(首選)

CentOS下使用ip addr命令檢視linux網路介面,也會看到IPv6地址。

# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127。0。0。1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 08:00:27:b5:54:32 brd ff:ff:ff:ff:ff:ff

inet 192。168。137。101/24 brd 192。168。137。255 scope global enp0s3

valid_lft forever preferred_lft forever

inet6 fe80::a00:27ff:feb5:5432/64 scope link

valid_lft forever preferred_lft forever

IPv6分類

1.本地關聯IPv6

本地關聯的IPv6,是以fe80開頭,與網絡卡的物理地址(MAC地址)有關,不需要透過DHCP自動分配或者手工設定。

2.全域性IPv6

如果需要跨網路或者跨路由器進行通訊,則需要使用全域性的IPv6。

建立全域性IPv6

建立全域性IPv6有多種的方式,例如DHCPv6、Stateless address autoconfiguration (SLAAC) 以及手工配置。

手工配置可以使用ip命令來配置:

# ip -6 addr add 2022:1:0:0::db1/64 dev enp0s3

或者使用ifconfig命令來配置:

# ifconfig enp0s3 inet6 add 2022:1:0:0::db1/64

透過上面任意一種方式配置後,可以看到enp0s3網路介面將增加一個inet6,並且是global屬性的。

# ip addr

1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127。0。0。1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 08:00:27:b5:54:32 brd ff:ff:ff:ff:ff:ff

inet 192。168。137。101/24 brd 192。168。137。255 scope global enp0s3

valid_lft forever preferred_lft forever

inet6 2022:1::db1/64 scope global

valid_lft forever preferred_lft forever

inet6 fe80::a00:27ff:feb5:5432/64 scope link

valid_lft forever preferred_lft forever

注意:上面IPv6字串配置中有db1,這符合HEX字元規則,非HEX字元則不允許設定,比如我們把db換成dx,則會提示下面的錯誤資訊。

# ifconfig enp0s3 inet6 add 2022:1:0:0::dx1/64

2022:1:0:0::dx1: Resolver Error 0 (no error)

IPv6連通性測試

在本地使用ping6進行連通性測試,先使用全域性IPv6進行測試:

# ping6 2022:1::db1 -c3

PING 2022:1::db1(2022:1::db1) 56 data bytes

64 bytes from 2022:1::db1: icmp_seq=1 ttl=64 time=0。027 ms

64 bytes from 2022:1::db1: icmp_seq=2 ttl=64 time=0。047 ms

64 bytes from 2022:1::db1: icmp_seq=3 ttl=64 time=0。028 ms

——- 2022:1::db1 ping statistics ——-

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 0。027/0。034/0。047/0。009 ms

再使用本地關聯IPv6進行測試,此時需要帶上網路介面名稱:

# ping6 fe80::a00:27ff:feb5:5432%enp0s3 -c3

PING fe80::a00:27ff:feb5:5432%enp0s3(fe80::a00:27ff:feb5:5432%enp0s3) 56 data bytes

64 bytes from fe80::a00:27ff:feb5:5432%enp0s3: icmp_seq=1 ttl=64 time=0。040 ms

64 bytes from fe80::a00:27ff:feb5:5432%enp0s3: icmp_seq=2 ttl=64 time=0。041 ms

64 bytes from fe80::a00:27ff:feb5:5432%enp0s3: icmp_seq=3 ttl=64 time=0。022 ms

——- fe80::a00:27ff:feb5:5432%enp0s3 ping statistics ——-

3 packets transmitted, 3 received, 0% packet loss, time 2000ms

rtt min/avg/max/mdev = 0。022/0。034/0。041/0。010 ms

配置IPv6

編輯postgresql。conf檔案,修改監聽引數:

listen_addresses = ‘*’

修改完後重啟服務,資料庫將監聽本機所有的網路介面。

編輯pg_hba。conf檔案,新增資料庫客戶端連線的IPv6認證條目:

host all all fe80::a00:27ff:feb5:5432/128 md5

host all all 2022:1::db1/128 md5

使用gsql客戶端進行測試

1。使用本地關聯IPv6進行測試,此時需要帶上網路介面名稱:

$ gsql -h fe80::a00:27ff:feb5:5432%enp0s3 -Umoguser postgres -r -p6432

postgres=> \conninfo

You are connected to database “postgres” as user “moguser” on host “fe80::a00:27ff:feb5:5432%enp0s3” at port “6432”。

postgres=> SELECT datname,usename, client_addr FROM pg_stat_activity where usename=‘moguser’;

datname | usename | client_addr

——————+————-+——————————————

postgres | moguser | fe80::a00:27ff:feb5:5432

(1 row)

2。使用全域性IPv6進行測試:

$ gsql -h 2022:1::db1 -Umoguser postgres -r -p6432

postgres=> \conninfo

You are connected to database “postgres” as user “moguser” on host “2022:1::db1” at port “6432”。

postgres=> SELECT datname,usename, client_addr FROM pg_stat_activity where usename=‘moguser’;

datname | usename | client_addr

——————+————-+——————-

postgres | moguser | 2022:1::db1

(1 row)

使用java jdbc進行測試

透過java程式test。jar包進行測試,test。jar需要三個入參,分別是jdbc url、jdbc username、jdbc password。

1。使用普通的IPv4進行測試:

$ java -jar test。jar jdbc:postgresql://192。168。137。101:6432/postgres moguser Admin@1234

執行結果如下,可以看到資料庫連線測試成功:

Input jdbc url:jdbc:postgresql://192。168。137。101:6432/postgres

Input jdbc username:moguser

Connection test successfully。

2。使用本地關聯IPv6進行測試,進行測試:

$ java -jar test。jar jdbc:postgresql://fe80::a00:27ff:feb5:5432:6432/postgres moguser Admin@1234

執行結果如下,可以看到資料庫連線測試成功:

Input jdbc url:jdbc:postgresql://fe80::a00:27ff:feb5:5432:6432/postgres

Input jdbc username:moguser

Connection test successfully

3。使用全域性IPv6進行測試:

$ java -jar test。jar jdbc:postgresql://fe80::a00:27ff:feb5:5432:6432/postgres moguser Admin@1234

執行結果如下,可以看到資料庫連線測試成功:

Input jdbc url:jdbc:postgresql://2022:1::db1:6432/postgres

Input jdbc username:moguser

Connection test successfully。

總結

1。openGauss/MogDB配置IPv6只需簡單修改listen_addresses = ‘*’ 即可。

2。使用gsql客戶端進行連線時,本地關聯IPv6還需要使用網路介面名進行訪問,全域性IPv6不需要。

3。使用jdbc客戶端進行連線時,無論是本地關聯IPv6還是全域性IPv6,直接使用地址即可。