Добрый день,
С сегодняшнего утра внезапно перестал работать шлюз МТ.
Пишет вот такую штуку:
Код:
05-23/13:45:27 ERROR [Thread-1363] MikrotikGateWorker - Gate unaccesible - 172.31.0.253
05-23/13:45:27 ERROR [Thread-1363] MikrotikGateWorker - -------------------------
05-23/13:45:27 ERROR [Thread-1363] MikrotikGateWorker - error: TargetError : at Line: 121 : in file: inline evaluation of: ``import java.util.*; import java.util.regex.*; import ru.bitel.bgbilling.common.* . . . '' : throw new RuntimeException ( e ) ;
Target exception: java.lang.RuntimeException: com.jcraft.jsch.JSchException: java.net.ConnectException: Connection refused
java.lang.RuntimeException: TargetError : at Line: 121 : in file: inline evaluation of: ``import java.util.*; import java.util.regex.*; import ru.bitel.bgbilling.common.* . . . '' : throw new RuntimeException ( e ) ;
Target exception: java.lang.RuntimeException: com.jcraft.jsch.JSchException: java.net.ConnectException: Connection refused
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:282)
at bitel.billing.server.ipn.GateWorker.runSync(GateWorker.java:139)
at bitel.billing.server.ipn.GateWorker.run(GateWorker.java:101)
Caused by: TargetError : at Line: 121 : in file: inline evaluation of: ``import java.util.*; import java.util.regex.*; import ru.bitel.bgbilling.common.* . . . '' : throw new RuntimeException ( e ) ;
Target exception: java.lang.RuntimeException: com.jcraft.jsch.JSchException: java.net.ConnectException: Connection refused
at bsh.BSHThrowStatement.eval(BSHThrowStatement.java:53)
at bsh.BSHBlock.evalBlock(BSHBlock.java:131)
at bsh.BSHBlock.eval(BSHBlock.java:81)
at bsh.BSHBlock.eval(BSHBlock.java:47)
at bsh.BSHTryStatement.eval(BSHTryStatement.java:166)
at bsh.BSHBlock.evalBlock(BSHBlock.java:131)
at bsh.BSHBlock.eval(BSHBlock.java:81)
at bsh.BshMethod.invokeImpl(BshMethod.java:362)
at bsh.BshMethod.invoke(BshMethod.java:258)
at bsh.BshMethod.invoke(BshMethod.java:161)
at bitel.billing.server.ipn.GateWorker$Scripter.invokeMethod(GateWorker.java:325)
at bitel.billing.server.ipn.GateWorker$Scripter.runScriptSync(GateWorker.java:268)
... 2 more
причем из 4х микротиков проблема только с одним (RouterOS 5.1), с версиями 4.хх все нормально работает.
Код:
import java.util.*;
import java.util.regex.*;
import ru.bitel.bgbilling.common.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.server.ipn.*;
import bitel.billing.server.util.ssh.*;
import bitel.billing.server.util.*;
import bitel.billing.server.util.ssh.SSHSession;
protected void doSync()
{
host = gate.getHost();
port = gate.getPort();
gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );
login = gateSetup.getStringValue( "login", "root" );
pswd = gate.getKeyword();
if ( log.isDebugEnabled() )
{
log.debug( " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd );
}
session = null;
try
{
session = new SSHSessionExec( host, port, login, pswd );
address_list = session.command( "ip firewall address-list print without-paging" );
new_address_list = null;
//log.info("addres_list="+address_list);
for ( UserStatus status : statusList )
{
cid = status.contractId;
ruleType = status.ruleType;
rule_id = 0;
if (ruleType != null)
{
rule_id = ruleType.getId();
};
rules = null;
if (address_list.indexOf( "cid="+cid+";rule_id="+rule_id+";") != -1)
{
// правило для этого договора есть на шлюзе
if ( status.status > 0 )
{
log.info("close");
log.info("cid="+cid+";rule_id="+rule_id+";");
if ( status.status == IPNContractStatus.STATUS_REMOVED )
{
// удаляем
rules = getDeleteRules( status );
for ( String rule : rules )
{
p = Pattern.compile("rule_id");
m = p.matcher(rule);
String r= m.replaceAll("rule_id="+rule_id);
log.info(r);
session.command(r);
}
}
else
{
// закрываем
rules = getCloseRules( status );
for ( String rule : rules )
{
p = Pattern.compile("rule_id");
m = p.matcher(rule);
String r= m.replaceAll("rule_id="+rule_id);
log.info(r);
session.command(r);
}
};
};
}
else if ( status.status == IPNContractStatus.STATUS_OPEN )
{
log.info("open");
log.info("cid="+cid+";rule_id="+rule_id+";");
//открываем
rules = getOpenRules( status );
for ( String rule : rules )
{
p = Pattern.compile("rule_id");
m = p.matcher(rule);
String r= m.replaceAll("rule_id="+rule_id);
log.info(r);
session.command(r);
}
};
/* if (rules != null){
for ( String rule : rules )
{
p = Pattern.compile("rule_id");
m = p.matcher(rule);
if (new_address_list == null)
{
new_address_list = "";
};
new_address_list = new_address_list + m.replaceAll("rule_id="+rule_id) + "\n";
};
};*/
}
/* if(new_address_list!=null)
{
log.info("new_address_list="+new_address_list.length());
}
if (new_address_list != null){
print(address_list);
print(new_address_list);
result = session.command(new_address_list);
print(result);
};
*/
}
catch( Exception e )
{
throw new RuntimeException( e );
}
finally
{
if ( session != null )
{
session.disconnect();
}
}
}
private getOpenRules( status )
{
return getRules( status, "\\[OPEN\\](.*)\\[/OPEN\\]" );
}
private getCloseRules( status )
{
return getRules( status, "\\[CLOSE\\](.*)\\[/CLOSE\\]" );
}
private getDeleteRules( status )
{
return getRules( status, "\\[DELETE\\](.*)\\[/DELETE\\]" );
}
private getRules( status, template )
{
// пользовательское правило, без типа - то все оставляем как есть
rule = status.rule.getRuleText();
// типизированное правило
if ( status.ruleType != null )
{
rule = generateRule( rule, status.gateType, status.ruleType, status.contractId );
}
pattern = Pattern.compile( template, Pattern.DOTALL );
m = pattern.matcher( rule );
if ( m.find() )
{
rule = m.group( 1 );
}
rule.replaceAll( "\r", "" );
return rule.split( "\n" );
}
private generateRule( addresses, gateType, ruleType, cid )
{
String rule;
replacements = new HashMap();
replacements.put( "\\{CID\\}", String.valueOf( cid ) );
ruleText = ManadUtils.getRule( gateType, ruleType );
rule = ManadUtils.generateRule( ruleText, addresses, replacements, ruleType );
return rule;
}
с самого сервера биллинга адрес 172.31.0.253 доступен.
если включить снифер на МТ, то видно что биллинг что то присылает на 22 порт микротика и получает что то в ответ. в логе микротика ошибок авторизации нет.
обновлений за последнее время не делали.
на что ругается биллинг?