春节期间找到一篇文章,需要 fg 才能看到:
https://medium.com/@tumalevich/kamailio-registration-replication-without-dmq-65e225f9a8a7
kamailio1 192.168.56.115
kamailio2 192.168.56.116
kamailio3 192.168.56.117
route[HANDLE_REPLICATION] {
if(route(FROM_REPLICATION_PEER)) {
if(is_method("REGISTER")) {
add_rcv_param();
msg_apply_changes();
if(!save("location", "0x02")) {
xlog("L_ERROR", "Replication from $si error");
}
exit;
}
if(is_method("INVITE")) {
record_route();
route(LOCATION);
}
}
}
route[FROM_REPLICATION_PEER] {
if(src_ip == myself) {
exit;
}
if(($si == '192.168.56.115') || ($si == '192.168.56.116') || ($si == '192.168.56.117')) {
return 1;
}
return -1;
}
route[REPLICATE] {
forward('192.168.56.115', 5060);
forward('192.168.56.116', 5060);
forward('192.168.56.117', 5060);
}
修改处理 REGISTER 的路由块:
route[REGISTRAR] {
if (!is_method("REGISTER")) return;
if(isflagset(FLT_NATS)) {
setbflag(FLB_NATB);
# do SIP NAT pinging
setbflag(FLB_NATSIPPING);
}
if (!save("location")) {
sl_reply_error();
}
route(REPLICATE); // 新增
exit;
}
修改 request_route 路由块:
request_route {
# per request initial checks
route(REQINIT);
# NAT detection
route(NATDETECT);
# CANCEL processing
if (is_method("CANCEL")) {
if (t_check_trans()) {
route(RELAY);
}
exit;
}
# handle retransmissions
if (!is_method("ACK")) {
if(t_precheck_trans()) {
t_check_trans();
exit;
}
t_check_trans();
}
# handle requests within SIP dialogs
route(WITHINDLG);
### only initial requests (no To tag)
route(HANDLE_REPLICATION); // 新增
# authentication
route(AUTH);
...