Updated August 17, 2026

Configure SAP Router for Velo access

What you'll achieve

By the end of this guide, Velo's cloud execution cluster will be able to reach your internal SAP ECC system through your already-deployed SAP Router, using a scoped route-permission entry and a firewall rule that exposes only the minimum surface area required.

This is the recommended connectivity approach when your SAP system sits on a private network or behind a corporate firewall, and you want to avoid deploying a separate tunnel agent or opening a VPN.

SAP Router must already be deployed. This guide assumes you have a running saprouter instance reachable from the public internet. If you haven't set up SAP Router yet, refer to the official SAP documentation first:

Prerequisites

  • SAP Router running — a saprouter process is listening on port 3299 (or a custom port) with a public IP or hostname.
  • Access to saprouttab — you can edit the route permission table on the SAP Router host and restart the process.
  • Firewall admin access — you can modify inbound rules on the host or network firewall in front of the SAP Router.
  • SAP system details — you know the private hostname or IP of your SAP ECC application server and its system number (e.g., 00, 01).
  • Velo IP address — Velo execution cluster egress IP ranges to configure the system connection.

Network overview

Velo execution cluster                SAP Router (public)              SAP ECC app server
   (fixed egress IP)                    saprouter :3299                   (private network)
        │                                      │                                 │
        │  TCP 3299 — SAP NI routing string    │   internal network only        │
        └────────────────────────────────────► │ ───────────────────────────────►
                                                │   dispatcher :3200 (32<sysno>) │
                                                │   message srv :3600 (36<sysno>)│

Velo connects once, over the public internet, to your SAP Router on port 3299. SAP Router then forwards the session internally to your SAP ECC application server — no inbound access to the SAP system itself is required.

Steps

1. Get Velo's egress IP

Velo's execution cluster connects to your SAP Router from a fixed set of outbound IPs. You must whitelist these in both your saprouttab and your network firewall.

Ask your Velo administrator for the current execution-cluster egress IP (or CIDR), then use that value in saprouttab and the firewall rule below. Do not hardcode an IP from an older copy of this guide.

2. Add Velo route entries to saprouttab

Open the route permission table on your SAP Router host. The file is typically located at the path passed to the -R flag when SAP Router was started, commonly located at:

  • Linux → /usr/sap/saprouter/saprouttab
  • Windows → C:\saprouter\saprouttab

Add one permit entry per Velo egress IP, pointing to your SAP ECC application server and dispatcher port (32 + system number). The dispatcher line is required for the connection string in step 5.

# saprouttab — Velo access entries
# Format: P <source_host> <dest_host> <dest_port> [<password>]
# Replace values in <> with your environment specifics

# Velo execution cluster — egress IPs (add one line per IP/range)
P   <VELO_EGRESS_IP_1>   <sap-ecc-hostname-or-private-ip>   3200

# If the Robot connection string uses /W/<password>, the same password
# must appear as the fourth field (and the reverse: a password here
# requires /W/<password> on the connection string).
P   <VELO_EGRESS_IP_1>   <sap-ecc-hostname-or-private-ip>   3200   <route-password>

# Message server port — only if you use SAP logon groups (not required
# for a dispatcher hop such as /S/3200). Port = 3600 + system number.
P   <VELO_EGRESS_IP_1>   <sap-ecc-hostname-or-private-ip>   3600

# Deny everything else — this line must remain at the end
D   *   *   *

Route password. /W/<password> in the connection string and the optional fourth saprouttab field must match. A permit line without a password will deny a password-protected hop, and a hop without /W/ will fail if saprouttab requires one.

Keep the deny-all rule at the bottom. SAP Router evaluates saprouttab top-to-bottom and stops at the first match. A D * * * at the end is your safety net — removing it would allow any source to route to any destination via your SAP Router.

For reference on all supported saprouttab syntax (permit, deny, password-protected, SNC entries), see the SAP Route Permission Table documentation.

3. Open the SAP Router port in your firewall

Your SAP Router host needs to accept inbound TCP on port 3299 (or your custom port). Add rules in your network or host-based firewall; the table below shows the required inbound entries:

DirectionProtocolPortSourcePurpose
InboundTCP3299Velo egress IPsSAP Router listener

No inbound rules are needed on the SAP ECC application server itself; it only communicates with SAP Router over the internal network, which is already permitted.

Custom port? If your SAP Router runs on a port other than 3299 (e.g., 3298), use that port in the firewall rule and in the Velo connection string in step 5.

4. Restart SAP Router to apply the new routes

SAP Router reads saprouttab at startup. You must stop and restart the process for your new entries to take effect.

Linux

# If managed by systemd
sudo systemctl restart saprouter

# If started manually as the saprouter OS user
su - saprouter
/usr/sap/saprouter/saprouter -s          # send stop signal
/usr/sap/saprouter/saprouter -r 
  -R /usr/sap/saprouter/saprouttab 
  -G /usr/sap/saprouter/dev_rout &

Windows

REM Run as Administrator in Command Prompt
saprouter.exe -s
saprouter.exe -r -R C:saproutersaprouttab -G C:saprouterdev_rout

5. Add the SAP system connection string in your Robot test cases

The connection is done using a connection string in the following format:

FieldValue
Connection string (via SAP router)/H/<saprouter-public-ip>/S/3299/H/<sap-ecc-private-ip>/S/3200
With route password (optional)/H/<saprouter-public-ip>/S/3299/W/<password>/H/<sap-ecc-private-ip>/S/3200
System ID (SID)Your 3-character SAP SID, e.g. ECD. Pass it as SystemId on Connect, or as &systemName=<SID> on the connection string.

/S/ is optional on each hop and defaults to 3299 (the SAP Router listener). The target dispatcher port (32 + system number, e.g. 3200) must still be set.

The router string tells Velo's SAP GUI runtime to hop through SAP Router before reaching the application server. The format follows the standard SAP NI routing string convention. See SAP Help: Route strings for full syntax details.

Connect waits 60 seconds by default for a router hop — long enough for a typical cross-internet DIAG handshake.

The following is an example test case with system number 00 and a SAP Router on a public Elastic IP 18.185.44.20:

*** Settings ***
Library    VeloSapguiLibrary    port=8081

*** Variables ***
${SAP_SERVER}     /H/18.185.44.20/S/3299/H/10.0.1.55/S/3200
# With a saprouttab route password:
# ${SAP_SERVER}    /H/18.185.44.20/S/3299/W/<password>/H/10.0.1.55/S/3200
${SID}            S4H

*** Test Cases ***
Create Sales Order
    ECC Login
    Create Sales Order
    Logout

*** Keywords ***
ECC Login
    Connect               ${SAP_SERVER}    SystemId=${SID}
    Type                  User        ${USER}
    Type                  Password    ${PASSWORD}
    Press Enter

Acknowledge Warning about License
    Press Enter

Create Sales Order
    Open Transaction      VA01
    Type                  Sales Document Type         or
    Type                  Distribution Channel        10
    Type                  Division                    00
    Press Enter

    Type                  Sold-to Party               17100003
    Type                  Ship-to Party               17100003
    Type                  Customer Reference          PO29922
    Type                  Incoterms Version           2010
    Type                  Incoterms (Part 1)          FAS
    Type                  Incoterms Location 1        100
    Type Cell             Material            0       NS0002
    Type Cell             Order Quantity      0       1
    Press Key             Ctrl+S
    Click                 Continue
    Verify                Status Bar                  MessageType        Contains    S
    ${order_number}=      Get Status Bar              MessageParameter[1]
    Log                   New order number is: ${order_number}

Logout
    Open Transaction      /nex

6. Enable SNC encryption (optional)

If your SAP system requires SNC, append SNC parameters to the connection string. This path is SAP GUI for Java / Velo cloud only. The Windows COM OpenConnection backend does not honour &sncon=… parameters.

An optional conn= prefix is accepted and stripped before the string is passed to openConnectionByConnectionString. The NI route and the &-delimited parameters are forwarded as supplied (the route is not rewritten).

${SAP_SERVER}    conn=/H/<router-ip>/S/3299/W/<password>/H/<sap-ecc-ip>/S/3200&sncon=true&sncqop=9&manualLogin=true&systemName=ECD

The supported parameters are:

ParameterPurpose
snconSet to true to request an SNC-protected channel.
sncqopQuality of protection, 19. Use 9 for maximum available protection.
sncnameSNC name of the server, e.g. p:CN=ECD, O=Acme. Leave unset for encryption-only connections.
manualLoginSet to true to log on with user and password rather than single sign-on.
systemNameThe SID. Velo uses it for the trust classification entry when the SystemId keyword argument is omitted.

Encryption only, not SSO. Velo uses the SNC library bundled with SAP GUI for Java, which secures the channel but does not provide an SNC identity. Logon still happens with user and password, so keep manualLogin=true and continue using the Type User / Type Password keywords. If your system is configured with snc/accept_insecure_gui = 0 it will reject this kind of connection — it requires a full PKI setup (CommonCryptoLib plus a PSE and credentials), which Velo does not currently support.

Note that a route password (/W/<password>) and SNC are independent: the password authorises the hop through SAP Router, while SNC protects the DIAG session end to end.

Verify

After restarting SAP Router, confirm it's listening and reachable before running a test:

# On the SAP Router host — confirm the process is listening
# Linux
ss -tlnp | grep 3299

# Windows (PowerShell)
netstat -ano | findstr :3299

From a Velo-side debug session (or any host on the whitelisted egress IP), confirm the port is reachable:

telnet <saprouter-ip> 3299

If the connection opens (even if it immediately closes, since telnet doesn't speak the SAP NI protocol), your firewall and saprouttab entries are correctly in place. You can then trigger a Velo run against the connection string from step 5.

Troubleshooting

SymptomLikely causeResolution
Connection timed outFirewall not open on port 3299 for Velo's IPs, or the DIAG handshake exceeded the Connect timeoutRe-check inbound firewall rules. Confirm the Velo egress IPs match those you allowed. Use telnet <saprouter-ip> 3299 from a Velo-side debug session to confirm reachability. Connect waits 60 seconds for a router hop; if the port is open and it still times out, the hop is likely dropped mid-handshake (wrong dispatcher port, saprouttab, or an intermediate firewall).
No route to host / connection refusedSAP Router process is not running or not listeningSSH into the SAP Router host and run ss -tlnp | grep 3299. If nothing is listening, restart the saprouter process.
Route permission denied (error in dev_rout)Velo's IP is not in saprouttab, the deny-all rule came before the permit entry, or the /W/ password does not match the fourth saprouttab fieldOpen saprouttab, verify the Velo IP entries appear above the D * * * line, confirm the route password matches /W/<password> on the connection string, then restart SAP Router.
Connect fails with Invalid SAP route stringThe NI route is malformed (unknown prefix, host shorter than two characters, or an unexpected /)Check the connection string: hops must be /H/host with optional /S/service and /W/password. See SAP Help: Route strings.
Trust dialog appears or Connect hangs on first connectionSystemId and systemName are both missing, or the written trust key omitted /W/<password> on a password-protected router hopPass SystemId=<SID> on Connect, or add &systemName=<SID> to the connection string. For a hop with /W/, the trust line must be SID@/H/router/S/port/W/password:Level5.
SAP logon screen not appearingWrong system number in the dispatcher portDispatcher port = 3200 + system number. For system number 01, use 3201. Check your SAP system's instance profile for the correct value.
Connect fails with "SAP GUI encryption-only mode is off"The SAP GUI runtime started without SNC encryption-only modeCheck the run log for [velo] SNC library: during startup. If it reports NOT FOUND, the SAP GUI installation in the execution image is missing libsapsncencryption and the image needs rebuilding.
SNC connection rejected by the SAP systemThe system requires an authenticated SNC identity, not just encryptionCheck snc/accept_insecure_gui on the SAP system. A value of 0 requires a PKI-based SNC identity, which the bundled encryption-only library cannot provide.
Intermittent disconnects during test runsSAP Router idle timeout closing long-lived DIAG sessionsIncrease or disable the SAP Router timeout with the -T <seconds> flag. See SAP Router startup options.

Frequently asked questions

Do I need SAP Router, or can I use the Velo tunnel agent instead?

Both options work for reaching SAP on a private network, but they have different trade-offs:

  • SAP Router — no software to install on your internal network; requires a public-facing SAP Router host and inbound firewall rules. Best if you already have SAP Router in place.
  • Velo tunnel agent (coming soon) — a lightweight agent installed on any host that can reach SAP internally; makes an outbound-only HTTPS connection to Velo (no inbound firewall rules needed). Best if you have no SAP Router or prefer not to open inbound access.

Until the tunnel agent ships, SAP Router is the supported path for connecting Velo to an on-prem SAP system.

What if my SAP Router is not yet installed?

This guide assumes SAP Router is already deployed. To install it, follow the official SAP documentation:

Once installed and running, return to this guide to configure Velo access.

Can I use one SAP Router for multiple SAP systems?

Yes. Add one permit entry per target system (or per port) in saprouttab, and create a separate Velo system connection for each with its own router string pointing to the corresponding host and dispatcher port.

For example, for a DEV and QA system on the same network:

P   <VELO_IP>   10.0.1.55   3200   # ECC DEV (sysno 00)
P   <VELO_IP>   10.0.1.56   3201   # ECC QA  (sysno 01)
D   *   *   *

Related