在 DPVS 中,SNAT(Source Network Address Translation,源地址转换)和 DNAT(Destination Network Address Translation,目标地址转换)是常用的网络地址转换技术。
SNAT 用于在数据包离开负载均衡设备时,将源 IP 地址修改为负载均衡设备的 IP 地址,从而实现客户端和负载均衡设备之间的解耦。这样,在回复响应时,响应的目标地址就是负载均衡设备的 IP 地址,而不是后端服务器的 IP 地址。这种方式可以确保响应流量直接由后端服务器返回给客户端,而不需要再经过负载均衡设备,减轻了负载均衡设备的处理压力。
DNAT 则用于将客户端请求的目标 IP 地址转换为后端服务器的 IP 地址。负载均衡设备会将客户端请求中的目标 IP 地址修改为后端服务器的 IP 地址,并将请求转发给对应的后端服务器。这样,后端服务器可以根据自己的 IP 地址来处理请求。DNAT 技术常用于将外部请求映射到内部的服务器群组。
DPVS NAT
1、DNAT
DNAT 在网络中发挥了以下几个作用:
-
服务器负载均衡:在负载均衡环境中,DNAT 技术被用来将客户端请求的目标 IP 地址转换为后端服务器集群中的一个具体服务器的 IP 地址。这样,负载均衡设备可以根据预设的算法将请求转发到合适的服务器上,实现负载均衡和资源优化。
-
防火墙和网络安全:DNAT 可以用于实现网络隔离和访问控制。通过设置 DNAT 规则,可以将外部网络中的请求转发到内部网络中特定的服务器上,同时隐藏内部服务器的真实 IP 地址。这样做可以增加网络的安全性并减少暴露在互联网上的风险。
-
服务发布和端口转发:通过 DNAT,可以将公网上的某个 IP 地址及其指定端口映射到内部网络中的一个特定服务器的 IP 地址和端口上。这样,可以方便地将某个服务(例如 Web 服务器、FTP 服务器等)发布到公网上,或者实现端口转发功能,将外部请求的特定端口转发到内部特定服务器的不同端口上。
- conf:
- #!/bin/sh -
- ! Configuration File for keepalived
- vrrp_instanceVI_1 {
- state BACKUP
- interface eth1
- virtual_router_id 123 # VID should be unique in network
- priority 50 # master's priority is bigger than worker,如果是备点此项要小于100
- advert_int 1
- dpdk_interface eth1
- nopreempt
- authentication {
- auth_type PASS
- auth_pass portPsd!2048
- }
- virtual_ipaddress {
- 192.168.100.100/32
- }
- }
- virtual_server192.168.100.100 8848 {
- delay_loop 6
- lb_algo rr
- lb_kind NAT
- persistence_timeout 50
- protocol TCP
- real_server 192.168.100.2 8848 {
- weight 1
- MISC_CHECK {
- misc_timeout 3
- }
- }
- }
srv:nc -lk 8848
cli: nc 192.168.100.100 8848
2、SNAT
在实际生产环境中,有些服务器需要通过+SNAT+功能来访问外网服务,可能的需求原因如下:
1、只提供内网服务,比如负载均衡反向代理后端的服务器,只配置内网地址
2、机房环境的原因,相关服务器临近的交换机不能配置公网+IP+资源
3、有些是出于公司商务成本考虑,为了节省开支,没有提供出公网的能力
4、有些是系统架构的设计或系统安全性的考虑
dpvs.conf
- vi/usr/local/ctlb/etc/dpvs.conf修改配置,关闭flow_enable
- !sa_pool config
- sa_pool{
- pool_hash_size 8
- flow_enable off
- }
Snat.conf
- #!/bin/sh -
- WAN_IP=100.1.1.2# WAN IP can access Internet.
- WAN_PREF=24# WAN side network prefix length.
- GATEWAY=100.1.1.1# WAN side gateway
- WAN_IP_1=100.1.1.3
- LAN_IP=192.168.0.2
- LAN_PREF=24
- # add WAN-side IP with sapool
- /usr/local/ctlb/bin/dpipaddr add $WAN_IP/$WAN_PREF dev eth1 sapool # must add sapool for WAN-side IP
- /usr/local/ctlb/bin/dpipaddr add $WAN_IP_1/$WAN_PREF dev eth1 sapool
- # add LAN-side IP as well as LAN route (generated)
- /usr/local/ctlb/bin/dpipaddr add $LAN_IP/$LAN_PREF dev eth1
- # add default route for WAN interface
- /usr/local/ctlb/bin/dpiproute add default via $GATEWAY dev eth1
keepalived.conf
- #!/bin/sh -
- !Configuration File for keepalived
- virtual_servermatch SNAT1 {
- protocol TCP
- delay_loop 3
- lb_algo rr
- lb_kind SNAT
- src-range 168.0.0-192.168.0.10
- oif eth1
- alpha
- omega
- quorum 1
- real_server 100.1.1.2 0 {
- weight 50
- }
- real_server 1.1.3 0 {
- weight 50
- }
- }
测试
srv:nc -lk 8848
cli: nc 100.1.1.1 8848
性能: